LinearLayout里面嵌套了Button,LinearLayout 设置了onClick 事件,但是Button 没有设置点击事件,当我点击Button 的时候,LinearLayout 的onClick 会不会执行?
不会执行

View(Button)对于ACTION_DOWN事件,只要是clickable的控件,默认都是返回true的。

在ACTION_UP和ACTION_MOVE的时候,由于LinearLayout没有拦截后续事件,所有后续所有的事件还是被Button消费了。
也就是如果在ACTION_DOWN的时候,父View不拦截事件,子View的onTouchEvent返回了true,接着在ACTION_MOVE的时候,父View还不拦截事件,那么ACTION_UP事件有没有被子View消费,父View也不管了,只管传递,
从源码中也可以看到,就算是Button处理了ACTION_DOWN,如果父View对与后续的ACTION_MOVE没有拦截。那么当ACTION_UP的时候,就算Button自己不处理,那么父View也不会处理。
这里补充一下:
当给Button加上android:clickable="false"时候,或者把button换成imageview,那么点击button或者imageview的时候
就会触发linearlayout的点击事件了。

原因就是 此时的onTouchEvent的ACTION_DOWN返回false,表示子View不处理此事件。
网友评论