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