1、概述
在Android 事件传递与焦点处理(tv) 这篇中有描述android 的事件传递与拦截分发的流程
这篇描述一下具体的一些焦点处理
先再提一下最常见的ViewGroup中的三种焦点处理方式,后续详细描述
FOCUS_BEFORE_DESCENDANTS 0x20000 默认
ViewGroup本身先对焦点进行处理,如果没有处理则分发给child View进行处理
FOCUS_AFTER_DESCENDANTS 0x40000
先分发给Child View进行处理,如果所有的Child View都没有处理,则自己再处理
FOCUS_BLOCK_DESCENDANTS 0x60000
ViewGroup本身进行处理,不管是否处理成功,都不会分发给ChildView进行处理
2、listView gridView 抢焦点 问题
2.1、 最常见的 item抢焦点
当item有焦点时,item上的button等子控件获取不到焦点;
当子控件有焦点时,item无焦点无法响应onItemClick事件
解决:(原因后面分析)
把焦点处理方式设成 FOCUS_BLOCK_DESCENDANTS
可以在xml中设置 也可以在代码里设置
2.2、listView GridView 在界面中抢了焦点
比如一个界面中有button gridView 还有其他的一些界面元素,一打开第一个焦点就落在gridView的item0 上
之所以用gridView说事,是实际中自己在写tv 界面时他老抢,listView与gridView类比
后面是用listView 或者 gridVi