在Android3.0之前系统提供的控件。注:官方不推荐直接使用Dialog创建对话框。传统的new AlertDialog在屏幕旋转时,第一不会保存用户输入的值,第二还会报异常,因为Activity销毁前不允许对话框未关闭。而通过DialogFragment实现的对话框则可以完全不必考虑旋转的问题。
AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;AlertDialog弹出时,背景是黑色的,但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;
1.Dialog在显示之前不需要设置宽高。
2.Dialog响应系统的back事件,在点击back的时候dialog会消失
3.Dialog会给弹出的背景加蒙层
4.Dialog默认设有标题,可以通过dialog.requestWindowFeature(Window.FEATURE_NO_TITLE)取消标题
5.Dialog显示需要加grarity,如果不设置,Dialog默认是Gravity.CENTER。
6.Dialog显示有默认背景,可以通过setBackgroundDrawable(new ColorDrawable(android.R.color.transparent));去掉。
1.PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待,在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
2.PopupWindow有默认背景,可以通过setBackgroundDrawable(new ColorDrawable(android.R.color.transparent))去掉。
3.PopupWindow显示的时候需要设置Gravity
4.PopupWindow没有标题
5.PopupWindow不会添加蒙层
6.PopupWindow显示前需要设置宽和高
7.Popupwindow默认不会响应物理键盘的back,除非显示设置了popup.setFocusable(true);
DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。
使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。
builder模式 对于参数传递的封装
title
显示位置
显示框大小
是否需要背景
是否需要左右按钮 左右按钮的事件回传
我们自己的view的传递
圆角的适配问题
是否相应点击back键
是否响应点击背景等
builder设计模式有利于清晰明了的知道传递的参数