Android View大厂面试题(二)

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不处理此事件。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容