您的位置:首页 > 运维架构

Popwindow与Dialog不同方式展示底部动画弹起弹窗

2016-10-19 10:56 232 查看

一 先看效果吧

     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

          
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息