本文主要是介绍Android 事件分发面试题2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
问:LinearLayout 里面嵌套Button,LinearLayout 设置了onClick 事件,但是Button 没有设置点击事件,当我点击Button 的时候,LinearLayout 的onClick 会不会执行?
答:不会执行,虽然View 的onTouch 对于Action_Down 事件,只要是ClickAble 的控件,默认是返回true,在Action_Up的时候,由于LinearLayout 没有拦截后续事件,所以后续所有的事件还是被Button 给消费了。所以,只有设置了Button的clickable 为false,这样点击Button 就不会消费事件。
从源码里面也会看到,就算是Button 处理了Action_Down,如果父容器对与后续的Action_MOVE 没有拦截,那么当Action_Up 的时候,就算Button 自己不处理,那么ViewGroup 也不会处理。
也就是如果在Action_Down 的时候,父亲不拦截事件,子View onTouchEvent 返回了true, 接着在
Action_Move 的时候,父亲还不拦截事件,那么Action_Up 事件 最终子View 有没有消费,父亲也不管了,只负责传递。
Action_Down 负责分发决定哪个控件处理本次事件,在Move 时,只可能存在拦截的可能,不存在再次分发事件的可能。一个View 在Activon_Down 的时候,可以返回true,表示我要处理这次事件,但是在Move 的时候也可以选择自己处理不处理。
这篇关于Android 事件分发面试题2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!