PopupWindow显示的时候,无法响应 back 按键

发现: 当有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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值