怎么使点击一个popupwindow窗口之外的区域popupwindow消失呢?

这个功能应该是不难的,查了下文档,没发现明显的方法可以调用。


开始以为popupWindow.setOutsideTouchable(true);这个方法可以呢,试了试,不行,其实这个方法时设置popupWindow以外的区域可以相应触摸事件,比如我们重写了触摸事件去做一些别的操作。


对了,还有,设置popupWindow.setFocusable(true);  这样才能让popupWindow里面的布局控件获得点击的事件,否则就被它的父亲view给拦截了。


如果你想处理back事件,就要重写popupWindow布局文件的onKeyListener()事件,这样才能自己做处理。比如下面的几行代码:

.setOnKeyListener(new OnKeyListener()
{// 手机键盘上的返回键
public boolean onKey(View v, int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_BACK:
if (softkeyboard_popupWindow != null && softkeyboard_popupWindow.isShowing())
{
softkeyboard_popupWindow.dismiss();
}
break;
}

}


一个朋友这样想的办法:(问题是setFocusable(false),这样后,里面的布局控件不能获得焦点,如果有一个EditText,就不能输入内容了,肯定是不行的。我想了想,可以设置setOutsideTouchable(true);,让popupWindow以外的布局可以获得触摸事件,然后我们重写onTouchEvent,去让popupWindow消失,如下面写的一样。

又测试了一下,终于明白了,.setFocusable(false),之所以要设置为false,就是为了让popupWindow出现的时候,它所依赖的父亲view仍然能获取到焦点,这样重写onTouchEvent就可以起作用了,如果设置为true,当你的popupWindow出现的时候,它的父亲view是获取不到焦点的,所以你重写onTouchEvent也没用,根本截获不到这个事件。

代码如下popupWindow.setFocusable(false);//focusable要为false(不设置默认的就是False);
//这是Activity 的OnTouchEvent。OnTouchEvent代表的是Activity 获得事件(即为PopupWindow之外)

@Override

public boolean onTouchEvent(MotionEvent event) {

// TODO Auto-generated method stub

if (popupWindow != null && popupWindow.isShowing()) {

popupWindow.dismiss();

popupWindow = null;

}

return super.onTouchEvent(event);

}


还有一个朋友记录了一些他的学习内容。如下:

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值