DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 移动应用 > Android

Android中自定义弹出PopupWindow后返回按键失效的问题解决

功能描述:弹出一个自定义的PopupWindow的提示框,点击稍后提醒以及键盘的返回键要能退出PopupWindow,为了达到鼓励用户注册的目的,点击其他部分窗口不会消失,毕竟咱的目的是更多的用户注册不是,点击返回键还能使其消失,毕竟返回键离手指头更近。
PopupWindow出现之后,默认的是所有的操作都无效的,除了HOME键。而且是可以操作后面的界面的。
想要锁定后面的界面,很简单,只需要让PopupWindow是focusable的:
popupWindow.setFocusable(true);  
这样,显示的时候,popupWindow获取啦焦点,后面的内容为非活动。
但是这样不能实现点击屏幕其他部分使其消失,返回键也不行。
这时候要给popupWindow设置一个一个BackgroundDrawable,如果你已经定义好布局,怕破坏掉样式,只需要设置一个空的Drawable即可:
popupWindow.setBackgroundDrawable(new PaintDrawable()); 
这样,点击屏幕其他部分和返回键都能实现使其消失的功能了。

要实现的仅仅是返回键使popupwindow消失。这里需要重写view的onKeyListener,这个view应该是popwindow的view,当然是最parent的那个view。


View layout = inflater.inflate(R.layout.account_dialog,  
        (ViewGroup) activity.findViewById(R.id.account_dialog));  
layout.setFocusable(true); // 这个很重要  
layout.setFocusableInTouchMode(true);  
  
popupWindow = new PopupWindow(layout);  
popupWindow.setFocusable(true);  
  
// 重写onKeyListener  
layout.setOnKeyListener(new OnKeyListener() {  
    @Override  
    public boolean onKey(View v, int keyCode, KeyEvent event) {  
        if (keyCode == KeyEvent.KEYCODE_BACK) {  
            accountDialog.dismiss();  
            accountDialog = null;  
            return true;  
        }  
        return false;  
    }  
});
要让生成popupwindow的那个view也是focusable的,保险起见,设置FocusableInTouchMode也为true。 这样再重写那个view的onKeyListener就行了。
from:http://www.houxiyang.com/archives/70/


本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号