Android PopWindow ACTION_OUTSIDE 事件处理

设计目标实现

点击一个Button触发显示PopWindow的OnClick响应,在Button上方出现PopWindow。点击其它地方PopWindow消失。

出现问题

点击其它地方没有问题,但是单击Button会使PopWindow先消失,随后触发Button的onclick又产生PopWindow。

解决思路(如果有其它思路欢迎告知)

利用延迟消失,在触发Button响应后再消失PopWindow。300毫秒是在本人手机上较合理的间隔,

间隔太短比如100ms依旧会出现Buttn响应在Touch响应之前,没有达到延迟效果。时间太长则影响用户体验。

关于返回值的问题

该OnTouchListener并不是覆盖源代码中的响应。如果返回值true,源代码中认为你已经处理了touch响应,

它不会再处理。返回值为false时,源代码中会继续执行关于其定义好的touch响应。如果我将返回值设置为

false时,会发生popwindow先消失再出现再消失的现象,这是因为先触发了源代码中的dismiss()方法,

然后又触发自己的Button的onClick响应,最后才轮到延时的dismiss()方法。

popMenu.setTouchInterceptor(new OnTouchListener() {

    @Override
    public boolean onTouch(View v, MotionEvent event) {
    mHandler.postDelayed(new Runnable() {
        @Override
        public void run() {
            dismissPopMenu();
        }},300);
    if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
            return true;
    }
            return false;
}

总结:源代码是程序员无尽的宝藏 one piece!

转载于:https://www.cnblogs.com/drinking/archive/2012/12/07/2807656.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值