zoukankan      html  css  js  c++  java
  • 如何禁止listview的item项获得焦点,而让item的子控件获得焦点

    本文为原创文章,欢迎转载,但请注明出处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其实已经获得焦点了,只是没有看出来而已)。
     
  • 相关阅读:
    python 正则表达式 (重点) re模块
    python 异常处理
    面向对象 反射 特殊方法
    3. 容器备份与迁移
    2. Docker部署tomcat, nginx, redis,及docker私有仓库
    1. Docker快速入门(仓库,镜像,容器)
    Linux部署项目 shell脚本启动 及 Centos7开放指定端口
    nginx快速入门
    linux安装mysql8(完整图文笔记)
    Redis主从架构核心原理
  • 原文地址:https://www.cnblogs.com/yexiubiao/p/2924324.html
Copyright © 2011-2022 走看看