android中的ListView中的item获取焦点事件或者绘制状态
2015-04-24 16:17
399 查看
最近遇到一个需求,就是需要把listview的item的点击事件传递给里面的ImageView,本来打算是重写onInterceptTouchEvent方法,使其返回false,让imageview可以传递事件的,但是感觉挺麻烦的,经大牛指导,原来普通的view有一个duplicateParentState属性,可以设置从父容器获取绘图状态,如:
对于android:duplicateParentState,网上搜了一下,下面做个总结:
这个属性设置为true,表示此控件将从父容器中获取绘图状态(比如光标,按下等),而没有获取事件,也就是点一下父容器,imageview会有点击的效果,这样就可以自定义点击选中和未选中的背景了。
既然要总结一下,就加深一点,android:addStatesFromChildren这个属性刚好相反,让父元素的highlight状态与子元素的highlight状态保持一致:
注意事项:
android:duplicateParentState="true" 与android:addStatesFromChildren="true"在同一个layout文件中事项时,如果View1元素中已经定义了android:addStatesFromChildren="true",则View1中嵌套的子元素则不应该在定义android:duplicateParentState="true" ,否则会在渲染的时候crash。
这个还比较好理解:android:addStatesFromChildren只的是状态与子元素状态一致,如果对应的子元素状态还定义依赖父元素的状态的属性android:duplicateParentState,则会出现依赖上的死循环。
查了一下,还有一个android:descendantFocusability属性:
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好,自己控制子类的焦点事件。
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:duplicateParentState="true" android:backgroud:"@drawable/selector" />
对于android:duplicateParentState,网上搜了一下,下面做个总结:
这个属性设置为true,表示此控件将从父容器中获取绘图状态(比如光标,按下等),而没有获取事件,也就是点一下父容器,imageview会有点击的效果,这样就可以自定义点击选中和未选中的背景了。
既然要总结一下,就加深一点,android:addStatesFromChildren这个属性刚好相反,让父元素的highlight状态与子元素的highlight状态保持一致:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.alibaba.android.babylon" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/bg" android:addStatesFromChildren="true"/>
注意事项:
android:duplicateParentState="true" 与android:addStatesFromChildren="true"在同一个layout文件中事项时,如果View1元素中已经定义了android:addStatesFromChildren="true",则View1中嵌套的子元素则不应该在定义android:duplicateParentState="true" ,否则会在渲染的时候crash。
这个还比较好理解:android:addStatesFromChildren只的是状态与子元素状态一致,如果对应的子元素状态还定义依赖父元素的状态的属性android:duplicateParentState,则会出现依赖上的死循环。
查了一下,还有一个android:descendantFocusability属性:
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
通常我们用到的是第三种,即在Item布局的根布局加上android:descendantFocusability=”blocksDescendants”的属性就好,自己控制子类的焦点事件。
相关文章推荐
- Android RecyclerView ListView 获取不到Item点击事件
- Android listview 的 item 点击无效(无法获取焦点)的解决方法
- Android使listview(GridView) 获取焦点时,选中上次失去焦点时的item,而不是就近的item
- Android开发之listview 的使用中Item获取焦点的处理
- android 机顶盒 listview 获取焦点改变item背景
- ListView 中设置setonitemclicklistener()监听时,无法获取item条目的点击事件焦点
- android关于Listview中定义了子控件,子控件和item同时获取焦点的问题
- Android TV 开发-listview(GridView)使用键盘获取焦点时,选中上次失去焦点时的item,而不是就近的item
- Android开发中listView的item无法获取焦点
- android:descendantFocusability listView中的item获取焦点用法简析
- Android 机顶盒开发过程中Listview指定item获取焦点
- android 焦点 ListView 点击事件获取失败
- android:descendantFocusability用法简析 解决listview中子控件导致item不能获取焦点
- Android中ListView或者GridView的Item和Item中控件的事件冲突
- Android TV开发:设置全局焦点框及listview中item的焦点获取
- Android ListView 获取不到Item点击事件
- android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)
- Android使listview(GridView) 获取焦点时,选中上次失去焦点时的item,而不是就近的item
- Android 机顶盒开发过程中Listview指定item获取焦点
- Android使listview(GridView) 获取焦点时,选中上次失去焦点时的item,而不是就近的item