码迷,mamicode.com
首页 > Windows程序 > 详细

按钮显示PopupWindow,setOutsideTouchable(true)时,点击按钮再次打开的问题

时间:2016-08-19 18:50:02      阅读:328      评论:0      收藏:0      [点我收藏+]

标签:

先给大家看看这个:http://www.makaidong.com/%E5%8D%9A%E5%AE%A2%E5%9B%AD%E7%9F%A5%E8%AF%86%E5%BA%93/21462.shtml

可以说我也是受到了一点这个的启发,虽然我的思路和这很不一样,记录下。

我没有去试上面的方法,但看着应该也可以,但是我觉得不太妥,所以没有用,大家想法不一样,所以也贴上给大家看看,同时也感谢大神的提醒。

同求有更多,更好想法的人相互分享!!

ok,废话不多说,进入正题:

问题是这样,我在界面的个button,点击显示一个PopupWindow,需求是需要点击它之外的地方让它消失,我相信这也是很多用到它的人的共同需求,(另说一句,一查就能查到的,要setOutsideTouchable(true)有效果,还需要给PopupWindow设置背景)。可是我还想,当我再次点击这个button时PopupWindow能消失,可是实际的效果是,当PopupWindow显示时,点button,PopupWindow就消失了,这时button的click事件还会响应,并且判断PopupWindow为没有显示,所以会再次把PopupWindow打开。

我的解决方法是,在显示PopupWindow的Activity重写dispatchTouchEvent(MotionEvent ev)方法,然后取消到PopupWindow的outside监听,这时,点击PopupWindow之外是不会消失的,但是我可以在Activity的dispatchTouchEvent(MotionEvent ev)方法监听到,在这里,我判断如果PopupWindow显示着,就关了它,并返回true,让这次的点击事件不再传到下面,也就是说,当再次点那个button时,其实这个button的click事件并没有执行,但是PopupWindow关了,效果达成,上代码:

    public boolean dispatchTouchEvent(MotionEvent ev) {
        if (popupWindow != null && popupWindow.isShowing()) {
            popupWindow.dismiss();
            return true;
        }
        return super.dispatchTouchEvent(ev);
    }

对了,再说一句,当点击PopupWindow里的内容时,dispatchTouchEvent()是不会监听的。。。

按钮显示PopupWindow,setOutsideTouchable(true)时,点击按钮再次打开的问题

标签:

原文地址:http://www.cnblogs.com/accumulate-gogogo/p/5788447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!