一.弹出框实现的几种形式

1.Dialog和AlertDialog

在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));去掉。

2.PopUpWindow

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);

 

2.DialogFragment

DialogFragment在android 3.0时被引入。是一种特殊的Fragment,用于在Activity的内容之上展示一个模态的对话框。典型的用于:展示警告框,输入框,确认框等等。

使用DialogFragment来管理对话框,当旋转屏幕和按下后退键时可以更好的管理其声明周期,它和Fragment有着基本一致的声明周期。且DialogFragment也允许开发者把Dialog作为内嵌的组件进行重用,类似Fragment(可以在大屏幕和小屏幕显示出不同的效果)。

 

4.基于R.id.content的添加view

 

5.基于Window Manager实现

 

二.下载地址

 

三.视频地址

 

四.弹出框的实现

 

五.通用弹框的实现

1.使用到的设计模式

builder模式 对于参数传递的封装

2.一般需要考虑的参数

title

显示位置

显示框大小

是否需要背景

是否需要左右按钮 左右按钮的事件回传

我们自己的view的传递

圆角的适配问题

是否相应点击back键 

是否响应点击背景等

3.参数的传递方式

builder设计模式有利于清晰明了的知道传递的参数