项目中有这样的需求:ListView中Item包含CheckBox和TextView,textview中需要对部分关键字添加点击事件。问题在于item总是抢占textview的点击事件,事件分发中出现了冲突。最复杂的方法,可以自定义listview,重写事件分发相关方法,可以解决这个问题。但是自定义控件比较麻烦,自己也不自信。众里寻他千百度,蓦然回首,android:descendantFocusability就在灯火阑珊处
,成功帮宝宝处理好冲突。
官方是这样来解释descendantFocusability
android:descendantFocusability
Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus.
Must be one of the following constant values.
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
用法:这个属性直接丢给viewgroup
代码如下:
<ListView
android:descendantFocusability="blocksDescendants"
android:focusable="false"
android:divider="@drawable/leftxian1"
android:id="@+id/flfg_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
listview item 中textview:
<TextView
android:focusable="true"
android:padding="5dp"
android:gravity="center_vertical"
android:textColor="@color/black"
android:id="@+id/text_law"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="wrap_content" ></TextView>
这个组合成功帮助宝宝渡过危机
这个属性在后面中使用不少,比如给viewGroup设置点击事件,直接告诉他暴力覆盖子控件点击事件,稳稳的幸福。
新手上路,有错误和不足的地方欢迎大婶拍砖