Android TV 开发系列文章目录

【Android TV 开发】安卓电视调试 ( 开启网络远程调试 )
【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )


文章目录

  • Android TV 开发系列文章目录
  • 一、父容器与子组件焦点获取关系处理
  • 二、不同电视设备上的兼容问题
  • 三、按键获取焦点
  • 四、触摸获取焦点

一、父容器与子组件焦点获取关系处理


在布局文件中 , 父容器的节点中使用 android:descendantFocusability 属性 , 用于设置 父容器 与 子组件 之间的 焦点获取先后顺序 ;

    <ScrollViewandroid:descendantFocusability="afterDescendants"android:layout_width="match_parent"android:layout_height="match_parent"></ScrollView>

android:descendantFocusability 属性取值 :

① beforeDescendants : 父容器 优先获取焦点 , 如果父容器不需要焦点 , 子组件才能获取到焦点 ;

② afterDescendants : 子组件 优先获取焦点 , 如果子组件不需要获取焦点 , 则父容器获取焦点 ;

③ blocksDescendants : 只有 父容器 能获取焦点 , 子组件不能获取焦点 ;

二、不同电视设备上的兼容问题


在开发时遇到这样一种情况 , 布局的样式是 ScrollView 中嵌入一个 ConstraintLayout 布局 , 在 ConstraintLayout 布局中设置了很多需要获取焦点的子组件 ;

运行正常的情况 : 在 Google 提供的模拟器上运行时 , 正常运行 , ScrollView 的子组件中可以正常获取焦点 ;

运行失败的情况 : 但是在真实的国产电视盒子中 , ScrollView 始终组织其子组件获取焦点 , 即使设置了 android:descendantFocusability=“afterDescendants” , 子组件也无法获取焦点 ;

最终的解决方案 : 在子组件中 , 将需要获取焦点的组件都添加 android:focusable=“true” 属性 , 这样就解决了上述问题 ;

由此可见 , 相同的代码 , 在不同型号 , 版本 , 厂家 的电视设备上 , 焦点的获取 , 移动 , 表现是不一样的 , 因此这里就涉及到了焦点的兼容问题 ;

本次在 康佳 电视盒子中 , ScrollView 会阻断子组件的焦点获取 , 但是在其它界面 , 没有添加 android:focusable=“true” 属性 , 焦点获取功能也可以正常使用 , 这就比较难受 ;

这里建议 : 为了适配尽可能多的电视设备 , 推荐如下做法 :

① 设置可获取焦点 : 给 需要获取焦点的组件 , 统一添加 android:focusable="true" 属性 ;

② 设置不可获取焦点 : 凡是 不需要获取焦点的组件 , 统一添加 android:focusable="false" 属性 ;

③ 设置组件兼容 : 凡是涉及到 父容器 与 子组件 之间的焦点获取的情况 , 统一使用 android:descendantFocusability 属性 ;

三、按键获取焦点


按键获取焦点 : 在手机上按键获取焦点已经不常用 , 使用遥控器 / 手柄 控制界面需要关注该操作 ;

在 xml 布局文件中 , 在组件节点上设置如下属性 , 取值 true 或 false ;

android:focusable="true"

按键获取焦点 一般是手机自带的物理键盘 , D-Pad 遥控器 ( 电视遥控器 ) , 游戏手柄 等 , 使用方向键 , 控制焦点改变 ;

如果该 android:focusable 属性设置为 true , 则说明该组件可以获取焦点 , 按照不同的方向按键 , 焦点跳转到本组件设定的对应方向上的件 id 对应的组件 ;

四、触摸获取焦点


触摸获取焦点 : 目前的触摸屏手机控制焦点的主流操作 ;

在 xml 布局文件中 , 在组件节点上设置如下属性 , 取值 true 或 false ;

android:focusableInTouchMode="true"

Button , TextView , 布局组件 , 等默认没有触摸焦点 , 因为这些组件可能用于点击事件 , 如果这些组件可获取焦点 , 用户点击这些组件后 , 要先获取焦点 , 触发 OnFocusChangeListener 回调 , 获取焦点后才能进行点击 ;

EditText 默认自动获取焦点 , 并且进入界面抢先获取焦点 , 该组件需要有光标 , 并且弹出软键盘 ;

【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )相关推荐

  1. android 按键分析,Android TV开发按键与焦点深入分析(四)

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前面三篇都是从源码的角度分析按键事件.焦点变换的原理,作为应用层的开发者, 分析源码都是带着实际的开发困惑的,要不然谁没 ...

  2. Android TV 开发有关PopupWindow的KeyListener(手机也能用)

    转载请标明原地址:Android TV 开发有关PopupWindow的KeyListener(手机也能用)_高磊的专栏-CSDN博客 现在这个公司主要是做智能电视视频方面.有硬件电视盒子,APP开发 ...

  3. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    原文:Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必 ...

  4. android tv 菜单键,Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    前言:关于<TV Metro界面(仿泰捷视频TV版)源码解析>由于都是相关代码,就不发公众号了,有兴趣的可以看链接:http://blog.csdn.net/hejjunlin/artic ...

  5. 【Android】android TV开发

    google翻译[https://www.jianshu.com/p/c216849986ed] Ⅰ.开始使用电视应用 为了使您的应用在电视设备上获得成功,您必须设计出可以在10英尺远的地方轻松理解的 ...

  6. 聊聊真实的 Android TV 开发技术栈

    智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了.但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样. 一.序 ...

  7. android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例

    近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快, ...

  8. android 仿 tv 菜单,Android TV 开发之仿泰捷视频最新 TV 版 Metro UI 效果

    Some Android TV related Sample 更多TV相关,欢迎关注公众号: Android TV开发交流群:135622564 1.Imitation of tai jie late ...

  9. Android TV开发:APP安装、ICON图标问题

    使用AndroidX版本的Android Studio开发的面向TV的APK,安装后,在电视默认主屏没有显示该APP的ICON,是怎么回事? 一开始没有注意到电视的Android版本,安装APK时出现 ...

最新文章

  1. docker 安装oracle_Windows系统下安装Docker,包你满意!
  2. SDNU 1178.能量项链(区间dp)
  3. 给IT新人的15个建议:苦逼程序员的辛酸反省与总结
  4. Build 2018大会:.NET概述和路线图
  5. simulink中mask设置_(实现BPSK学习Verilog)1. Simulink仿真实现
  6. 如何添加二级标题_怎样给Word文档添加目录?
  7. html漩涡源码,html5 canvas多边形漩涡
  8. python入门环境准备_python入门 之 环境配置(一)
  9. 【信号与系统|吴大正】4:信号分解、傅里叶变换与信号谱(上)
  10. 卷积神经网络的几种模型
  11. 嵌入式linux调节lcd背光,背光调节的软件设计 - 基于嵌入式Linux的LCD背光调节及驱动实现...
  12. 教师计算机考核有啥用,教师计算机使用管理制度和考核方案
  13. 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc
  14. IC笔试牛客网verilog刷题总结四
  15. 基于视觉的动态手势轨迹跟踪
  16. CSS的水平居中与垂直居中
  17. 制作方舟mod如何连接服务器,方舟服务器怎么添加MOD | 手游网游页游攻略大全
  18. 小技巧 - 怎样屏蔽群消息(包括 @全体成员)?
  19. eNSPV100 软件(华为ENSP模拟器)及其安装指南
  20. EndNote 的使用教程

热门文章

  1. Framework7:不会Objective-C,也能开发iOS7应用
  2. Oracle存储过程(增、删、改)写法
  3. 后盾网lavarel视频项目---lavarel用户认证实例
  4. ResDepot CRC码
  5. Hibernate学习4—关联关系一对多映射2
  6. Action 参数的取值及其含义
  7. vue 上传图片 input=file
  8. 开发nagios插件监控/etc/passwd中文件变化
  9. LeetCode Range Addition II
  10. python--输出spwm的数组