本质区别为:
AlertDialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;
而PopupWindow是阻塞式对话框:PopupWindow弹出时,程序会等待
在PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。
这两种区别的表现是:AlertDialog弹出时,背景是黑色的
但是当我们点击背景,AlertDialog会消失,证明程序不仅响应AlertDialog的操作,还响应其他操作
其他程序没有被阻塞,这说明了AlertDialog是非阻塞式对话框;
PopupWindow弹出时,背景没有什么变化
但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。PopupWindow pw = new PopupWindow(view,width,height);
// 重新设置PopupWindow的内容
pw.setContentView(popupconten);
// 默认是false,为false时,PopupWindow没有获得焦点能力
// 如果这是PopupWindow的内容中有EidtText,需要输入,这是是无法输入的;
// 只有为true的时候,PopupWindow才具有获得焦点能力,EditText才是>真正的EditText。
pw.setFocusable(true);
// 设置PopupWindow弹出的位置
pw.setAsDropDown(View view);
AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。
要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。
使用AlertDialog.Builder创建对话框需要了解以下几个方法:setTitle :为对话框设置标题
setIcon :为对话框设置图标
setMessage:为对话框设置内容
setView : 给对话框设置自定义样式
setItems :设置对话框要显示的一个list,一般用于显示几个命令时
setMultiChoiceItems :用来设置对话框显示一系列的复选框
setNeutralButton :普通按钮
setPositiveButton :给对话框添加"Yes"按钮
setNegativeButton :对话框添加"No"按钮
create : 创建对话框
show :显示对话框Dialog alertDialog = new AlertDialog.Builder(this).
setTitle("对话框的标题").
setMessage("对话框的内容").
setIcon(R.drawable.ic_launcher).
create();
alertDialog.show();