一 先看效果吧
1 Popwindow 方式
2 Dialog 方式
二 Popwindow 与Dialog的区别
1 相同点 :
a:都是Android中的对话框 实现弹窗功能 可显示在页面的大部分位置
b:都可以根据setContentView来设置窗体的自定义内容
c:都可以触摸控件以外的区域关闭控件
Popwindow : popwindow.setOutsideTouchable(true);
Dialog: dialog.setCanceledOnTouchOutside(true);
2 不同点:
a :最重要一点 ,Dialog是非阻塞式对话框:AlertDialog弹出时,后台还可以做事情;而PopupWindow是阻塞式对话框 PopupWindow 弹出时,程序会等待在 PopupWindow退出前,程序一直等待,只有当我们调用了dismiss方法的后,PopupWindow退出,程序才会向下执行。这两种区别的表现是:Dialog弹出时,背景是黑色的,但是当我们点击背景,Dialog会消失,证明程序不仅响应Dialog的操作,还响应其他操作,其他程序没有被阻塞,这说明了Dialog是非阻塞式对话框;PopupWindow弹出时,背景没有什么变化,但是当我们点击背景的时候,程序没有响应,只允许我们操作PopupWindow,其他操作被阻塞。
b: 设置Popwindow 和 Dialog 的宽高
1动态设置Popwindow的宽高
WindowManager m =context.getWindowManager();//获得屏幕管理器 Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p =context.getWindow().getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 1); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 1); // 宽度设置为屏幕的0.5 context.getWindow().setAttributes(p); 如果想使Popwindow弹出时也出现背景变暗 可使用一下方案 将透明度和出现弹窗的Activity 传进去 即可
2动态设置Dialog的宽高
WindowManager m =dialogWindow.getWindowManager();//获得屏幕管理器 Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用 WindowManager.LayoutParams p = dialogWindow.getAttributes(); // 获取对话框当前的参数值 p.height = (int) (d.getHeight() * 0.6); // 高度设置为屏幕的0.6 p.width = (int) (d.getWidth() * 1); // 宽度设置为屏幕的0.5 dialogWindow.setAttributes(p);
c:当弹出 Popwindow时背景不会变灰色 而弹出Dialog时背景会自动变灰色
所以要让Popwindow也变灰色 需要使用两种方法方法
第一种 :传入透明度 和 弹出Popwindow的的Activity /** * 设置添加屏幕的背景透明度 * * @param bgAlpha */ public void backgroundAlpha(float bgAlpha, Activity context) { WindowManager.LayoutParams lp = context.getWindow().getAttributes(); lp.alpha = bgAlpha; //0.0-1.0 context.getWindow().setAttributes(lp); } 第二种 :给Popwindow 设置背景 <pre name="code" class="java"> // 实例化一个ColorDrawable颜色为半透明 ColorDrawable dw = new ColorDrawable(0xb0000000); // 设置SelectPicPopupWindow弹出窗体的背景 popupWindow.setBackgroundDrawable(dw);
d:在使用 样式 Style时的不同
Popwindow :this.setAnimationStyle(R.style.mypopwindow_anim_style
Dialog: // 定义Dialog布局和参数 dialog = new Dialog(context, R.style.custom_dialog);
三 Popwindow 和 Dialog的使用
1 使用之前的思考 : 在项目中需要使用 对话框 的需求 。
如果 需要让窗口出现一个具体的位置 比如一个控件的相对位置 此时建议使用 Popwindow
具体方法为 popwindow.showAsDropDown(view); popwindow.showAsDropDown(view,intx,inty);
如果 对于窗口弹出时,程序还在执行其他操作 需要使用Dialog 或者没有特别的要求时 使用Dialog
例子上面有
2 Dialog和Popwindow在使用底部弹起时 需要使用的到特定的 Style 样式
还是直接下载源码看吧
源码效果
源码地址 :http://download.csdn.net/download/qq_33553515/9659012