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,那么这其实和事件传递毫无关系,完全是继承的事,安继承的关系处理即可。相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories