【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )
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 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )相关推荐
- android 按键分析,Android TV开发按键与焦点深入分析(四)
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前面三篇都是从源码的角度分析按键事件.焦点变换的原理,作为应用层的开发者, 分析源码都是带着实际的开发困惑的,要不然谁没 ...
- Android TV 开发有关PopupWindow的KeyListener(手机也能用)
转载请标明原地址:Android TV 开发有关PopupWindow的KeyListener(手机也能用)_高磊的专栏-CSDN博客 现在这个公司主要是做智能电视视频方面.有硬件电视盒子,APP开发 ...
- Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑
原文:Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必 ...
- android tv 菜单键,Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑
前言:关于<TV Metro界面(仿泰捷视频TV版)源码解析>由于都是相关代码,就不发公众号了,有兴趣的可以看链接:http://blog.csdn.net/hejjunlin/artic ...
- 【Android】android TV开发
google翻译[https://www.jianshu.com/p/c216849986ed] Ⅰ.开始使用电视应用 为了使您的应用在电视设备上获得成功,您必须设计出可以在10英尺远的地方轻松理解的 ...
- 聊聊真实的 Android TV 开发技术栈
智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了.但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样. 一.序 ...
- android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例
近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快, ...
- android 仿 tv 菜单,Android TV 开发之仿泰捷视频最新 TV 版 Metro UI 效果
Some Android TV related Sample 更多TV相关,欢迎关注公众号: Android TV开发交流群:135622564 1.Imitation of tai jie late ...
- Android TV开发:APP安装、ICON图标问题
使用AndroidX版本的Android Studio开发的面向TV的APK,安装后,在电视默认主屏没有显示该APP的ICON,是怎么回事? 一开始没有注意到电视的Android版本,安装APK时出现 ...
最新文章
- docker 安装oracle_Windows系统下安装Docker,包你满意!
- SDNU 1178.能量项链(区间dp)
- 给IT新人的15个建议:苦逼程序员的辛酸反省与总结
- Build 2018大会:.NET概述和路线图
- simulink中mask设置_(实现BPSK学习Verilog)1. Simulink仿真实现
- 如何添加二级标题_怎样给Word文档添加目录?
- html漩涡源码,html5 canvas多边形漩涡
- python入门环境准备_python入门 之 环境配置(一)
- 【信号与系统|吴大正】4:信号分解、傅里叶变换与信号谱(上)
- 卷积神经网络的几种模型
- 嵌入式linux调节lcd背光,背光调节的软件设计 - 基于嵌入式Linux的LCD背光调节及驱动实现...
- 教师计算机考核有啥用,教师计算机使用管理制度和考核方案
- 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc
- IC笔试牛客网verilog刷题总结四
- 基于视觉的动态手势轨迹跟踪
- CSS的水平居中与垂直居中
- 制作方舟mod如何连接服务器,方舟服务器怎么添加MOD | 手游网游页游攻略大全
- 小技巧 - 怎样屏蔽群消息(包括 @全体成员)?
- eNSPV100 软件(华为ENSP模拟器)及其安装指南
- EndNote 的使用教程