Framework面试安卓大厂面试题

Android View大厂面试题(二)

2022-08-14  本文已影响0人  在岁月中远行

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

上一篇 下一篇

猜你喜欢

热点阅读