PopupWindow里面要响应点击事件,所以就调用了setFocusable(true)方法,这样造成了显示了PopupWindow,无法响应按键事件了。
如果你只是要响应返回键:
PopupWindow调用setBackgroundDrawable(new BitmapDrawable())这个方法就行了,貌似是要设个背景资源(具体原因查API也没搞清),这里设个空的就不影响其他界面了。但是我发现现在的版本这种方法被启用了,可是还能用。
如果你需要响应其他按键,比如我是按menu出来PopupWindow,再按menu就消失:
先获得你自定义PopupWindow的layout
diyView = getLayoutInflater().inflate(“自定义的layout”, null);
PopupWindow获得焦点后,Activity的按键事件是响应不了的,所以获得这个layout的一个子View(我是获得最外层的RelativeLayout),设置OnKeyListener,让这个view在PopupWindow显示的时候响应按键事件,看代码:
- RelativeLayout layout = (RelativeLayout) diyView.findViewById(R.id.othernavigation_root);
- layout.setFocusableInTouchMode(true);//能够获得焦点
- layout.setOnKeyListener(new OnKeyListener() {
- @Override
- public boolean onKey(View v, int keyCode, KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- switch(keyCode) {
- case KeyEvent.KEYCODE_BACK:
- checkAndClear();
- break;
- case KeyEvent.KEYCODE_MENU:
- checkAndClear();
- break;