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

时间:2021-03-07 10:47:00

一 先看效果吧

     1 Popwindow 方式

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

     2 Dialog 方式 

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

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

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

           如果  对于窗口弹出时,程序还在执行其他操作 需要使用Dialog  或者没有特别的要求时 使用Dialog

             例子上面有

         2 Dialog和Popwindow在使用底部弹起时 需要使用的到特定的 Style 样式

            还是直接下载源码看吧

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

            源码地址 :http://download.csdn.net/download/qq_33553515/9659012