如何监听popupwindow消失的状态
1个回答
展开全部
开始以为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);
}
对了,还有,设置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);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询