您的位置:首页 > 移动开发 > Android开发

Android事件传递机制

2015-10-14 10:07 337 查看

1.前言

这些天为了隐藏一个键盘搞得晕头转向,事情是这样的,界面中有两个控件,一个是EditText另一个是RecycleView,要求是在点击RecycleView的时候改变EditText的状态,同时隐藏键盘,由于RecycleView还有一个父类,点击事件都是在父类中处理的,子类便获取不到焦点,查了很多资料,写了Demo,得出下面的结论。

2.Android的事件传递机制

说到事件,不得不说它的载体,View和ViewGroup,它们都是在屏幕上存在并占据一定空间的,onInterceptTouchEvent,onTouchEvent是两个用来控制触摸事件的方法:onInterceptTouchEvent顾名思义,这是用来决定触摸事件是否被拦截的方法,当返回true时则拦截,onTouchEvent是用来处理事件并决定是否消费事件的方法,下面看图解释:



0表示最顶层的控件,依次是A、B,我们吧0称为底层、下方,把B成为顶层、上方。由上图可以看出onInterceptTouchEvent是由下向上传递的,二onTouchEvent是由上向下传递的,这点很重要,onInterceptTouchEvent决定了事件能流到哪个层,onTouchEvent决定了事件可以被哪个层处理。

上图中很明显事件流到了最顶层,最下层也处理了消息,即所有的层都得到了onTouchEvent事件。



但是如上图所示,在A层的onIntercepTouchEent返回了true,即表示事件在这个层被阻断了,无法再向上层传递,所以B层也接触不到事件,而是在A层就直接返回。



如上图所示,A层的onTouchEvent返回了true表示该层消费了触摸事件所以不会返回0层,0层也获取不到事件。

3.总结

记得onInterceptTouchEent是向上传递、是先驱,onTouchEvent向下传递、是处理。

4.后话

其实还有一种情况比较容易混淆,A是ViewGroup类,B继承自A,那么这其实和事件传递毫无关系,完全是继承的事,安继承的关系处理即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android onTouch