首页 > 代码库 > popup window

popup window

本人小菜一个。目前只见过两种弹出框的实现方式,第一种是最常见的PopupWindow,第二种也就是Activity的方式是前几天才见识过。感觉很霸气哦。没想到,activity也可以做伪窗口。

先贴上最常见的方法,主要讲activity的方法。

一、弹出PopupWindow

          /**           * 弹出menu菜单           */           public void menu_press(){               if(!menu_display){                   //获取LayoutInflater实例                   inflater = (LayoutInflater)this.getSystemService(LAYOUT_INFLATER_SERVICE);                   //这里的main布局是在inflate中加入的哦,以前都是直接this.setContentView()的吧?呵呵                   //该方法返回的是一个View的对象,是布局中的根                  layout = inflater.inflate(R.layout.main_menu, null);                                    //下面我们要考虑了,我怎样将我的layout加入到PopupWindow中呢???很简单                  menuWindow = new PopupWindow(layout,LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); //后两个参数是width和height                  //menuWindow.showAsDropDown(layout); //设置弹出效果                  //menuWindow.showAsDropDown(null, 0, layout.getHeight());                                    //设置如下四条信息,当点击其他区域使其隐藏,要在show之前配置                  menuWindow.setFocusable(true);                  menuWindow.setOutsideTouchable(true);                  menuWindow.update();                  menuWindow.setBackgroundDrawable(new BitmapDrawable());                                                     mClose = (LinearLayout)layout.findViewById(R.id.menu_close);                  menuWindow.showAtLocation(this.findViewById(R.id.schoolmain), Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0,50); //设置layout在PopupWindow中显示的位置                  //如何获取我们main中的控件呢?也很简单                  mMainbtn = (LinearLayout)layout.findViewById(R.id.menu_main_btn);                  mHistorybtn = (LinearLayout) layout.findViewById(R.id.menu_history_btn);                  mHelpbtn = (LinearLayout) layout.findViewById(R.id.menu_help_btn);                                                       //下面对每一个Layout进行单击事件的注册吧。。。                  //比如单击某个MenuItem的时候,他的背景色改变                  //事先准备好一些背景图片或者颜色                  mMainbtn.setOnClickListener (new View.OnClickListener() {                      @Override                      public void onClick(View arg0) {                          mywebView.loadUrl(URL);                          menuWindow.dismiss(); //响应点击事件之后关闭Menu                      }                  });                  mHelpbtn.setOnClickListener (new View.OnClickListener() {                      @Override                      public void onClick(View arg0) {                          mywebView.loadUrl(URL);                          menuWindow.dismiss(); //响应点击事件                      }                  });                  mHistorybtn.setOnClickListener (new View.OnClickListener() {                      @Override                      public void onClick(View arg0) {                          mywebView.loadUrl(URL);                          menuWindow.dismiss(); //响应点击事件                      }                  });                      menu_display = true;                              }else{                  //如果当前已经为显示状态,则隐藏起来                  menuWindow.dismiss();                  menu_display = false;              }                       }                    public void back_press(){               if(menu_display){         //如果 Menu已经打开 ,先关闭Menu                  menuWindow.dismiss();                  menu_display = false;                  }              else {                  Intent intent = new Intent();                  intent.setClass(MainActivity.this,Exit.class);                  startActivity(intent);              }          }

这种方法很简单,要注意的是如果要想点击其他地方使其隐藏,要在show设置四条属性如下:

                                // 使其聚焦 
                                mPopupWindow.setFocusable(true); 
                                // 设置允许在外点击消失 
                                mPopupWindow.setOutsideTouchable(true); 
                                //刷新状态  
                                mPopupWindow.update(); 
                                  
                                //点back键和其他地方使其消失,设置了这个才能触发OnDismisslistener ,设置其他控件变化等操作
                                mPopupWindow.setBackgroundDrawable(new BitmapDrawable());

以上文字摘自:http://www.cnblogs.com/winxiang/archive/2012/11/20/2778729.html