发现: 当有PopupWindow显示的时候,无法处理 back 键。想到的效果是 用户按back键时,把本页面上浮显的 popupWindow 给 dimiss 掉
当当前Activity中显示popupWindow时,
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
System.out.println("SA: Come here onKeyDown.... ");
if (keyCode == KeyEvent.KEYCODE_BACK) {
System.out.println("SA: Come here KEYCODE_BACK.... ");
if(popupWindow != null && popupWindow.isShowing()){
popupWindow.dismiss();
}
return true;
}
return super.onKeyDown(keyCode, event);
}
上面的方法将不会被执行,经过实验发现,这要 popupWindow是否能够获得焦点有关,也就是说如果焦点还在activity上,是可以响应按键的。
popupWindow = new PopupWindow(popupWindow_view, 200, 150, false);// false 说明不能获得焦点,popupWindow中的内容界面将不好获得软键盘响应,设为true的话,就可以在popup当中响应输入等事件,但是无法实在上面我所想要的“用户按back键,取消poupWindow”
那如何实现我所想要的效果呢?poupWindow即能够得到焦点,也可以响应back键并关闭。
最简单的解决方法:
popupWindow = new PopupWindow(popupWindow_view, 200, 150, true);// 创建PopupWindow实例,
popupWindow.setBackgroundDrawable(new BitmapDrawable()); //这一行,不会对popup的样式产生任何影响,同时,它还实现了一个比较好的效果,那就是当用户点击除popupWindow以外的任何位置(当然,要保证在popupWindow的相对父组件区域内),都会自动关闭 popupWindow。这个效果真不错!
同时不需要再捕获返回键了,去除相应代码。
参考资料:http://blog.csdn.net/simayilong/article/details/6696765