PopupWindow和AlertDlog的实现,以及他们差别

什么是Dialog


Dialog类,是一切对话框的基类,需要注意的是,Dialog类虽然可以在界面上显示,但是并非继承于View类,而是直接从java.lang.Object开始构造出的。类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。Activity负责生成、保存、恢复它。在生命周期的每一个阶段都有一些回调函数供系统反向调用。
ShowDialog(int id):负责显示标示为id的Dialog,这个函数如果调用后,系统将反向调用Dialog的回调函数onCreateDialog(int id);

dismissDialog(int id):使标示为id的Dialog在界面当中消。

什么是popupwidow


  PopupWindow在android.widget包下,弹出窗口的形式展示。官方文档对该控件的描述是:“一个弹出窗口控件,可以用来显示任意视图(View),而且会浮动在当前 活动(activity)的顶部”。PopupWindow可以让我们实现多种自定义控件,例如:menu、alertdialog等弹窗似的View。


 AlertDlog 的实现:

         dlg = new AlertDialog.Builder(BabyDatail.this,R.style.dlg( 可选项)).create();
            
            dlg.setView(LayoutInflater.from(this).inflate(
                R.layout.jiazaizhong, null));              // 设置view

            dlg.show();                //显示出来
          

           final Window window = dlg.getWindow();    //  Alertdlg 可以getWindow,说明 它可以是这个窗口的管理者 
            
            window.setContentView(R.layout.jiazaizhong);
            WindowManager.LayoutParams layparam = window.getAttributes();
            layparam.width = getWindowManager().getDefaultDisplay().getWidth();  //设置  window的宽为屏幕宽度
            window.setAttributes(layparam);
         
  Button button=(Button) window.findViewById();

           button.setOnclickListener(new OnclickListener(){

                        public void onClick(View v){


                      }

             });


           popupWindow的实现


                LayoutInflater inflater = (LayoutInflater) context.getActivity()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            conentView = inflater.inflate(R.layout.activity_classify, null);                //得到view
        
             WindowManager.LayoutParams params= context.getActivity().getWindow().getAttributes();  
                params.alpha=0.5f;  
                    
              context.getActivity().getWindow().setAttributes(params);        //popupWindow  并不能管理 window  必须通过activity
        // 设置SelectPicPopupWindow的View
        this.setContentView(conentView);
        // 设置SelectPicPopupWindow弹出窗体的宽
        this.setWidth(LayoutParams.MATCH_PARENT);
        // 设置SelectPicPopupWindow弹出窗体的高
        this.setHeight(LayoutParams.WRAP_CONTENT);

        // 设置SelectPicPopupWindow弹出窗体可点击
        this.setFocusable(true);
        this.setOutsideTouchable(true);
        // 刷新状态
        this.update();
        // 实例化一个ColorDrawable颜色为半透明
        ColorDrawable dw = new ColorDrawable(-00000);
       
        // 点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
        this.setBackgroundDrawable(dw);
         this.showAsDropDown(parent,0, 0);        // Pw 的显示  parent 是一个view  pw以它为基准 在下方 或者上方。。。显示   0 0 为x y方向 偏移



            差别:

           AlertDialog 用起来感觉  在 Activity 之上的另一个 窗体, 它可以 在这个窗体上 任意 操作

           popwindow 与activity  关系紧密, popwindow  好像一个activity 上的一个插件 ,共同作用一个窗体

          

           popwindow 是new 出来的 ,而 AlertDialog ,是 bulid出来的,popwindow  作为一个类 可以做一些强大的   工作

          用处:

            如果activity上的元素 需要和 popouwindow 上的元素 共同作用,则使用popouwindow

           功能强大的 浮窗 也需要用popwidow


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值