应用PopupWindow时,如何响应按键操作

小编在之前做的Launcher中,需要自定义一个Menu。由于AlertDialog不能横向充满全屏,导致小编只能使用PopupWindow来实现了。但是当时间完之后才发现有个需求着实蛋疼,就是按Menu键弹出菜单之后,再按Menu键不能隐藏!直接原因就是这个PopupWindow做的Menu不能响应手机的按键。
解决的思路就是:用PopupWindow里面的View来响应按键(好机智的说)。废话不多说了,直接上代码。
public PopupWindow getMenuPopupWindow(Context context, ViewmenuView) {
       finalPopupWindow mPop = new PopupWindow();
       if(menuView== null) {
          returnnull;
       }
      mPop.setContentView(menuView);
      mPop.setWidth(LayoutParams.MATCH_PARENT);
      mPop.setHeight(LayoutParams.MATCH_PARENT);
      //mPop.setAnimationStyle(R.style.PopupWindowAnimation);
      mPop.setFocusable(true);
      mPop.setBackgroundDrawable(new ColorDrawable(0));
      mPop.update();
       menuView.setFocusableInTouchMode(true);
       menuView.setOnKeyListener(new View.OnKeyListener() {
         
         @Override
          publicboolean onKey(View v, int keyCode, KeyEvent event) {
             // TODOAuto-generated method stub
             if (keyCode== KeyEvent.KEYCODE_MENU) {
               mPop.dismiss();
             }
             returnfalse;
          }
       });
       LinearLayout backgroundLinear=   (LinearLayout)menuView.findViewById(R.id.menu_background_linear);
       backgroundLinear.setOnClickListener(new View.OnClickListener(){
         
         @Override
          public voidonClick(View v) {
             // TODOAuto-generated method stub
             if(mPop !=null) {
               mPop.dismiss();
             }
          }
       });
       return mPop;
    }
以上这个方法是小编制作PopupWindow的方法。有几点值得一提的地方:
1. mPop.setFocusable(true);
   mPop.setBackgroundDrawable(new ColorDrawable(0));
这两句代码很神奇,这样做可以实现一个效果,就是按Back键可以把PopupWindow给dismiss掉。
2. menuView.setFocusableInTouchMode(true);
这句代码很重要,它是让PopupWindow内部的menuView能够获得焦点,这样menuView才能响应按键。
阅读更多
个人分类: Android
上一篇Android开发中:如何判断某Application和Activity的存在性
下一篇通过对inflate与 findViewById 方法的探究深度了解一下Android
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭