如何禁止listview的item项获得焦点,而让item的子控件获得焦点

转载 2015年07月08日 09:02:09
本文为原创文章,欢迎转载,但请注明出处http://www.cnblogs.com/yexiubiao/archive/2013/02/24/2924324.html,未在文章页面明显位置给出原文连接的,将保留追究法律责任的权利。   
 
在机顶盒开发中会遇到这样的需求,listview上的item项中有一张图片(item里的ImageView子控件),当按下机顶盒遥控器的方向键时(例如方向键的下键),让listview的某一个item项里面的图片(如下图左边的ImageView)获得焦点,而不是让item自身获得焦点(下图右)。
         
 
    默认的情况下,是listview的item自身获得了焦点(如上图右),也就是说listview的item获得焦点后,没有传递给子控件或者子控件默认不能获得焦点。
这时候我们可能会想到在布局文件里设置listview的descendantFocusability属性(焦点传递性):android:descendantFocusability="afterDescendants"
然而无论设置其值为afterDescendants还是beforeDescendants或blocksDescendants都没有达到想要的效果。
接下来我们可能会继续寻找listview是否有以item为关键字的相关属性,结果很遗憾,找遍了所有属性都没有item相关的关键字。
 
    其实与item相关的设置在配置文件里面虽然没有,但是代码里还是有的,如下:
listView.setItemsCanFocus(true); //设置item项的子控件能够获得焦点(默认为false,即默认item项的子空间是不能获得焦点的)
通过这一行代码即可实现以上需求,另外,关于焦点的传递大家有兴趣的话可以自行查看源码。
 
补充:如果没有出现左图的获得焦点高亮效果,可能有以下原因:
1,ImageView默认不能获得焦点,应该设置属性为:android:focusable="true" (如果是ImageButton或Button等则不需要设置,他们默认是可以获得焦点的)
2,没有为该ImageView设置自定义drawable图片的的selector(该ImageView其实已经获得焦点了,只是没有看出来而已)。

Android--焦点问题-ListView中item及其子控件无法响应点击事件

ListView中item及其子控件无法响应点击事件原因 存在Button、ImageButton、CheckBox(一般是是Button或者CheckBox及其子类控件)等获取焦点能力比较强的控...
  • u010378579
  • u010378579
  • 2015年10月12日 01:09
  • 2096

如何禁止listview的item项获得焦点,而让子控件获得焦点

在机顶盒开发中会遇到这样的需求,listview上的item项中有一张图片(item里的ImageView子控件),当按下机顶盒遥控器的方向键时(例如方向键的下键),让listview的某一个item...
  • u012992345
  • u012992345
  • 2016年06月07日 19:10
  • 1087

用BaseAdapter解决Listview列表项中的子控件无法获得焦点

事由: ListView的子列表项item具有点击触摸事件,例如OnItemClickListener()和OnItemLongClickListener()。若此时item中的子控件(例如...
  • ChenChenSnow
  • ChenChenSnow
  • 2016年03月31日 14:29
  • 389

android listview 中item 子控件抢占焦点问题

开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adapter去继承BaseAdapter,在adapter中按照需求进行编写,问题就出现了...
  • mzm2438975656
  • mzm2438975656
  • 2015年12月08日 14:04
  • 749

ListView的Item中子控件抢占焦点的两种解决办法

      当为ListView的Item自定义布局时,如果布局中包含可获取焦点的子控件(诸如ImageButton,Button,CheckBox等子控件,也可以说是Button或者Check...
  • biaobiao1217
  • biaobiao1217
  • 2015年07月13日 16:04
  • 1739

Android ListView Item与子控件焦点问题

经常会碰到ListView Item和子控件焦点冲突问题,查了很多资料后发现问题出在listview item的父容器布局中 android:descendantFocusability属性和子控件 ...
  • u010838555
  • u010838555
  • 2014年12月29日 20:37
  • 1804

如何禁止listview的item项获得焦点,而让item的子控件获得焦点

在机顶盒开发中会遇到这样的需求,listview上的item项中有一张图片(item里的ImageView子控件),当按下机顶盒遥控器的方向键时(例如方向键的下键),让listview的某一个item...
  • RiverAM
  • RiverAM
  • 2013年12月14日 15:28
  • 776

ListView子控件获取焦点问题

android:descendantFocusability用法简析     开发中很常见的一个问题,项目中的listview不仅仅是简单的文字,常常需要自己定义listview,自己的Adap...
  • wuqiong_524itcast
  • wuqiong_524itcast
  • 2014年03月03日 15:34
  • 5490

ListView中item与其中的组件(按钮)的焦点获取冲突问题

本人初学在学习安卓时,遇到过这么一问题。在一个ListView 中,每一个子Item中存在Button(类似的其他自动获取焦点的组件)时,ListView的OnItemClickListener和On...
  • wang54512866
  • wang54512866
  • 2015年09月29日 11:33
  • 485

ListView子控件焦点问题

自定义ListView的时候经常要继承BaseAdapter,如果ListView的每个Item有自己独立的监听事件,比如Button,ImageButton之类的,这样很容易造成焦点冲突,往往造成I...
  • hj563308597
  • hj563308597
  • 2014年10月29日 11:42
  • 3714
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何禁止listview的item项获得焦点,而让item的子控件获得焦点
举报原因:
原因补充:

(最多只允许输入30个字)