1 popupWindow = new PopupWindow(view, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 2 popupWindow.setFocusable(true); 3 4 //下面2行是解决点击空白地方不消失的问题 5 popupWindow.setOutsideTouchable(true); 6 popupWindow.getContentView().setOnTouchListener(new OnTouchListener() 7 { 8 public boolean onTouch(View v, MotionEvent event) 9 { 10 popupWindow.dismiss(); 11 return true; 12 } 13 }); 14 15 //下面2行是解决按返回键不消失的问题, 16 //btnlayout这个popupWindow布局中的一个控件不要用有点击的控件 17 View btnlayout = view.findViewById(R.id.calendar_view); 18 btnlayout.setFocusableInTouchMode(true); 19 btnlayout.setOnKeyListener(new OnKeyListener() 20 { 21 @Override 22 public boolean onKey(View v, int keyCode, KeyEvent event) 23 { 24 if (keyCode == KeyEvent.KEYCODE_BACK) 25 { 26 if (popupWindow != null) 27 { 28 popupWindow.dismiss(); 29 } 30 return true; 31 } 32 return false; 33 } 34 });
只需要给PopupWindow 中随便一个view设置个OnKeyListener 就可以了,因为前面设置了 pw.setFocusable(true); 所以PopupWindow 抢到了焦点所以造成了按返回键不消失或接受不到返回键。
http://blog.csdn.net/hustpzb/article/details/7891803 这个文章很详细,如果上面的方法解决不了可以看下。