您的位置:首页 > 移动开发 > Android开发

Android中PopupWindow点击窗口之外和返回键消失,界面锁定的实现

2013-09-06 12:07 405 查看
这几天做谷居网android应用到混天暗地的程度了。。

做一个加入灵感集的操作,需要用户注册,弹出这么一个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就行了。

转摘自:http://www.houxiyang.com/archives/70/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: