Android ViewGroup 点击会使子View 的select 生效

Android ViewGroup 点击会使没有点击功能的子View 的select 生效。

很奇怪,记录一下。因为这个bug发生的场景其实很少,因为既然设置了select 一般都会设置当前View为可点击。设置setOnClickListener与setClickable(true)都可以使View拥有被点击的功能。

源码跟踪一下:View 的 onTouchEvent 方法,在down 事件中,调用了setPressed(true, x, y);

跟踪进去:setPressed 方法中调用了 dispatchSetPressed(pressed);方法
跟踪进去:dispatchSetPressed(pressed)方法中调用了 refreshDrawableState方法,而这个方法便是子View改变样式的根源。

在ViewGroup 的 dispatchSetPressed 中 会去遍历子View,如何条件符合会去调用了view.setPressed()中。

if (!pressed || (!child.isClickable() && !child.isLongClickable())) {
          child.setPressed(pressed);
}

所以看到没有,只有没有clickable 状态的View 才会有这个bug

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值