关于ViewGroup点击无效的解决方案
2018-08-28 本文已影响0人
YanMars
开发中我们经常会遇到ViewGroup中添加子View,同时 也会有响应点击事件
我们会发现当子View也添加点击事件的时候,ViewGroup可能不会全区域响应点击
原因就是事件传递有流程
事件模型主要涉及到3个概念:事件分发(dispatchTouchEvent),事件拦截(onInterceptTouchEvent),事件的响应(onTouchEvent)
事件传递的顺序 : Activity -> ViewGroup -> View

1、首先事件肯定先传递给ViewGroup(dispatchTouchEvent)
2、如果父控件不拦截(onInterceptTouchEvent),分发传递给子控件(dispatchTouchEvent)
a.如果子控件是ViewGroup,返回1
b.如果子控件是View,响应子View (onTouchEvent)
3、如果拦截,直接响应当前控件(onTouchEvent)
上述是大概一个事件传递的过程,接下来我们来看一下ViewGroup 中有子View


如果我们对这个这个控件都添加点击事件
如果我点击按钮区域

如果我点击蓝色区域

这样是正常且正确的效果
所以当你ViewGroup内部同时又子View时都需要响应点击事件,如果你的ViewGroup点击某些区域没有响应点击回调,很可能是子View响应了