Android TV UI开发常用知识
导入依赖
Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库。
implementation 'androidx.leanback:leanback:$version'
常用的页面
这些Fragment有设计好的样式,只需要根据场景选择对应的Fragment,并往里面填充内容即可。
1. BrowseSupportFragment
可以理解为一个水平的tab页面。左边是tab,右边是tab对应的数据。

2. VerticalGridSupportFragment
内部是ViewticalGridView的页面。

3. GuidedStepSupportFragment
左边是描述,右边是选项的设置页面。

4. ErrorSupportFragment
信息加按钮的页面。

5. LeanbackSettingsFragment
右侧弹出的设置页面,里面加载一个PreferenceFragment.

常用组件
1. HorizontalGridView&VerticalGridView
HorizontalGridView和VerticalGridView都继承自RecyclerView,针对TV的特性,在item排版、焦点流转、上/失焦动画、记住焦点、焦点item对齐位置等方面做了比较好的封装。
以HorizontalGridView为例,开发时设计的组件包括:
- HorizontalGridView:RecyclerView的子类;
- ArrayObjectAdapter:承担MVP中model的职责,负责提供数据访问接口
- Presenter:职责类似RecyclerView的adapter,辅助item视图的创建和数据绑定等
- PresenterSelector:根据不同的数据类型选择不同的Presenter,用于多item type列表模型
- ItemBridgeAdapter:HorizontalGridView和ObjectAdapter的桥梁,用于解耦双方
- FocusHighlightHelper:上焦动画帮助类,内置了两种上焦动画
private void initViews() {mHgv= (HorizontalGridView) findViewById(R.id.hgv);//3行mHgv.setNumRows(3);//item纵向和横向的距离mHgv.setItemSpacing(20);//item的对齐方式mHgv.setGravity(Gravity.CENTER_VERTICAL);//设置mHgv.setOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {@Overridepublic void onChildViewHolderSelected(RecyclerView parent, RecyclerView.ViewHolder child, int position, int subposition) {super.onChildViewHolderSelected(parent, child, position, subposition);Log.d(TAG, "onChildViewHolderSelected() returned: " + position);//大部分情况下可以通过该方法获取到position}@Overridepublic void onChildViewHolderSelectedAndPositioned(RecyclerView parent, RecyclerView.ViewHolder child, int position, int subposition) {super.onChildViewHolderSelectedAndPositioned(parent, child, position, subposition);Log.d(TAG, "onChildViewHolderSelectedAndPositioned() returned: " + position);//当通过setSelectedPosition()方法大幅移动列表时,该方法会回调,返回的是最终的真实的position(当set的值超出范围时...)}});
如果想控制VerticalGridView或者HorizontalGridStyle的焦点是否可以移出去,可以在它的style中设置下面四个属性:
<style name="MyVerticalGridStyle"><item name="focusOutFront">true</item><item name="focusOutEnd">false</item><item name="focusOutSideStart">false</item><item name="focusOutSideEnd">true</item></style>
分别对应四个方向,设置为false,表示焦点不能从该方向移到外面,即使在该方向上有能获取焦点的View。如果都为false,那焦点只能在VerticalGridView里面切换了,无法移出到外面。
2. 飞框
智能电视UI需要高亮用户所选中的项来达到导航的效果。 焦点项飞框的动画效果就是飞框会自动移动到下一个选中项,并且会根据下一个选中项的大小进行伸缩变化来包裹高亮下一个选中项。
原理是使用属性动画,获取下一个选中项和当前选中项的位置和宽高等信息,然后使用属性动画和这些信息来动态实现移动飞框View的移动和宽高等动画效果。
Android TV 焦点移动飞框的实现
一些细节
- TV开发中,焦点的移动默认是根据系统分配的,但是也可以拦截遥控器的事件,手动分配焦点。
@SuppressLint("RestrictedApi")
@Override
public boolean dispatchKeyEvent(KeyEvent event) {if (event.getAction() == KeyEvent.ACTION_DOWN) {//当按键按下的时候。int keyCode = event.getKeyCode();switch (keyCode) {case KeyEvent.KEYCODE_DPAD_DOWN:///break;}}return super.dispatchKeyEvent(event);
}
- View获取焦点的方法是requestFocus()
- Android instrumentation是Android系统里面的一套控制方法或者”钩子“。通过Instrumentation可以用来模拟用户的操作,如按键或者点击事件,因此Instrumentation经常被用到测试中
相关文章:
Android TV UI开发常用知识
导入依赖 Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库。 implementation androidx.leanback:leanback:$version常用的页面 这些Fragment有设计好的样式&…...
Xshell 下载及安装
文章目录下载安装连接服务器Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET 协议。Xshell 通过互联网到远程主机的安全连接以及它创新性的设计和特色帮助用户在复杂的网络环境中享受他们的工作。 Xshell可以在Windows界…...
【LeetCode】剑指 Offer(12)
目录 题目:剑指 Offer 30. 包含min函数的栈 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:剑指 Offer 30. 包含m…...
vue在history模式下打包部署问题解决
引言 项目使用的模板是element-template,由于业务需要,我将路由的hash模式更改为了history模式,然后在打包部署项目时就出现了问题 个人发现是资源的访问路径有问题,在部署之后发现每次访问的js资源路径前都会自动携带上我路由的…...
Java中常见性能优化策略的总结
文章目录1. 代码优化2. 数据库层面优化SQL调优架构层面的调优连接池调优3. 网络优化4. 缓存缓存分类使用场景选型考虑什么时候更新缓存?如何保障更新的可靠性和实时性?缓存是否会满,缓存满了怎么办?缓存是否允许丢失?丢…...
c++日志库log4cplus使用
项目中需要打印log,方便程序调试和问题定位分析。C实现的log4cplus日志库是一种易于使用的C 日志记录API,可提供线程安全,灵活且任意粒度的日志管理和配置控制。 下面介绍一下在linux中安装log4cplus库过程 下载地址:https://gi…...
什么是接口测试,我们如何实现接口测试?
1. 什么是接口测试 顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主…...
随机森林在sklearn中的实现
目录 一.集成算法 二.sklearn中的集成算法模块ensemble 三.RandomForestClassifier(随机森林分类器) 四.重要参数 1.基评估器参数 2.随机森林参数 五.重要属性和接口 六.Bagging的另一个必要条件 七.RandomForestRegressor(随机森林回归器) 八.机器学习中调参的基本思…...
[论文总结] 深度学习在农业领域应用论文笔记11
深度学习在农业上的应用笔记11 最近发表的相关论文数量不多,质量普遍也不尽如人意,尤其是《Computers and Electronics in Agriculture》这个期刊。这些论文的方法都很简单,只是强行将深度学习应用于某个问题上,而没有考虑到农业…...
Android 9.0 SystemUI 状态栏屏蔽弹出的悬浮式通知
1.概述 在9.0的系统ROM产品定制化开发中,在systemui的状态栏中,会在有闹钟 wifi连接等特殊弹窗通知的时候,会在接收到系统通知时,弹窗悬浮式弹窗通知,然后过几秒中, 就消失了,所以像这样的悬浮式通知,在有些产品中是不需要的,要求屏蔽掉,这就需要按照悬浮式流程来分析…...
商简智能计划与排程SPS在纺织行业中的应用
企业背景 某织造、染色及后整理一体化工艺的纺织面料企业,主要从事户外功能运动服装、内衣、泳衣、汽车内饰等面料的研发和销售,年产值在20亿左右,是迪卡侬运动面料最优质供应商之一。 纺织行业特点 印染具有典型的流程行业特性,…...
549、RocketMQ详细入门教程系列 -【消息队列之 RocketMQ(三)】 2023.02.28
目录一、Spring 整合 RocketMQ1.1 消息生产者1.2 消息消费者1.3 Spring 配置文件1.4 运行实例程序二、参考链接一、Spring 整合 RocketMQ 不同于 RabbitMQ、ActiveMQ、Kafka 等消息中间件,Spring 社区已经通过多种方式提供了对这些中间件产品集成,例如通…...
如何使用SpringBoot ⽇志?
Spring Boot自定义日志的打印:在一个类中先获取到打印日志对象(日志框架提供的日志对象,而日志框架默认已经集成到Spring Boot里了,springboot默认使用 slf4jlogback);注意:得到日志对象Logger ->来自于slf4j2、使用目志对象提…...
山东大学数字图像处理实验:MATLAB的图像显示方法
文章目录MATLAB 学习实验目的实验原理及方法实验内容MATLAB的图像显示方法实验目的实验内容MATLAB 学习 实验目的 了解 MATLAB 的基本功能及操作方法。掌握典型离散信号的 Matlab 产生和显示。 实验原理及方法 在 MATLAB 中, 序列是用矩阵向量表示, 但它没有包含采样信息, …...
Java缓存面试题——Redis解决方案
文章目录1、什么是缓存击穿?该如何解决2、什么是缓存穿透?该如何解决3、什么是缓存雪崩?该如何解决4、什么是BigKey?该如何解决bigkey的危害发现bigkey解决bigkey5、redis过期策略都有哪些?6、讲一讲Redis缓存的数据一…...
Flink:The generic type parameters of ‘Collector‘ are missing 类型擦除
类型擦除问题处理报错日志描述问题描述报错解决其他方法方法一:TypeInformation方法二:TypeHint报错日志描述 报错日志: The generic type parameters of Collector are missing. In many cases lambda methods dont provide enough informa…...
MySQL查询操作
系列文章目录前言一、简单查询SELECT子句SELECT后面之间跟列名DISTINCT,ALL列表达式列更名WHERE子句WHERE子句中可以使用的查询条件比较运算BETWEEN...AND...集合查询:IN模糊查询LIKE空值比较:IS NULL多重条件查询SELECT 的基本结构ORDER BY子句排序聚集…...
Redis-day01-note
Redis-day01-note 文章目录**Redis-day01-note****安装****配置文件详解****数据类型****字符串类型(string)**列表数据类型(List)****与python交互**Redis介绍特点及优点 1、开源的,使用C编写,基于内存且支持持久化 2、高性能的…...
嵌入式C基础知识(19)
时序在前面我们说到当处理器要向外设芯片写数据时,需要先将所需访问的外设的地址放在地址总线上,然后,由译码器将地址总线上的数据转换成片选信号,片选信号则使能目标外设芯片,接下来处理器写数据到数据总线上…...
java 2(程序流程控制)【含例题详解】
java ——程序流程控制 ✍作者:电子科大不知名程序员 🌲专栏:java学习指导 各位读者如果觉得博主写的不错,请诸位多多支持;如果有错误的地方,欢迎在评论区指出 目录java ——程序流程控制分支结构if-elsesw…...
3个简单步骤彻底解决Dell G15笔记本散热问题:开源温度控制中心完全指南
3个简单步骤彻底解决Dell G15笔记本散热问题:开源温度控制中心完全指南 【免费下载链接】tcc-g15 Thermal Control Center for Dell G15 - open source alternative to AWCC 项目地址: https://gitcode.com/gh_mirrors/tc/tcc-g15 你是否正在为Dell G15笔记本…...
保姆级教程:用STM32F103C8T6的ADC读取MPX4250压力传感器数据(附完整代码)
从零开始:STM32F103C8T6驱动MPX4250压力传感器全流程解析 硬件准备与传感器基础 MPX4250作为工业级压力传感器,其核心优势在于宽量程(20-250kPa)和出色的线性输出特性。这款传感器采用硅压阻技术,内部集成了温度补偿…...
用Python+OpenCV给《梦幻西游》写个自动挖图脚本(附完整代码与避坑指南)
用PythonOpenCV实现《梦幻西游》自动挖宝图的全流程实战 最近在技术社区看到不少关于游戏自动化的讨论,尤其是像《梦幻西游》这类经典MMORPG,很多开发者尝试用计算机视觉技术实现自动化操作。作为一个长期关注OpenCV应用的开发者,我花了三周…...
从‘主仆’到‘边沿’:一个硬件工程师眼中的触发器进化史,以及为什么主从结构今天依然值得学
从机械钟摆到量子比特:触发器技术演进中的工程智慧 在数字电路的世界里,触发器如同精密的时间齿轮,默默协调着信息流动的节奏。当我们回溯这段技术发展史,会发现每一次触发器结构的革新都不是偶然的灵感闪现,而是工程…...
别再为nRF52840开发环境头疼了!Win10 + Keil5 + SDK 16.0.0 保姆级配置指南
nRF52840开发环境配置:从零搭建到实战调试的全流程指南 1. 开发环境搭建前的准备工作 对于初次接触nRF52840的开发者来说,环境配置往往是第一个拦路虎。不同于常见的STM32开发环境,nRF52840的开发需要Nordic特有的SDK支持,同时还…...
谱域图算子与边缘计算优化实践
1. 图算子技术背景与核心价值图神经网络(GNN)在工业场景的应用正面临两大核心挑战:一是传统消息传递机制在深层网络中的过平滑现象,二是边缘设备上的计算资源限制。我们团队在热交换器监测项目中首次发现,当GNN层数超过…...
别再用Excel硬扛了!SPSS数据视图和变量视图保姆级上手指南
别再用Excel硬扛了!SPSS数据视图和变量视图保姆级上手指南 第一次打开SPSS时,很多从Excel转过来的用户会愣住——这个界面怎么既熟悉又陌生?左边明明也是表格,但为什么右键菜单里找不到"设置单元格格式"?右上…...
AI编码助手安全护栏:Claude代码生成规则引擎实战指南
1. 项目概述:为AI编码助手装上“护栏”最近在折腾AI辅助编程,特别是用Claude这类大模型来写代码,效率提升确实明显。但用久了就会发现一个问题:模型生成的代码,有时候会“放飞自我”。比如,它可能会引入一些…...
认知神经科学研究报告【20260045】
文章目录ForeSight 5.87.5 自动设计8位CPU架构MiniCPU-8 架构自动涌现 — 测试报告结果ForeSight 5.87.5 自动设计8位CPU架构 MiniCPU-8 架构自动涌现 — 测试报告 测试目标:验证系统能否从零开始,自主发现并实现一个能正确执行斐波那契数列计算的8位C…...
手把手教你用PCI Geomatica处理Pleiades三线阵影像:从GCP刺点到DEM滤波的完整避坑指南
高分辨率卫星立体像对处理实战:PCI Geomatica全流程精解与避坑策略 当Pleiades三线阵影像遇上PCI Geomatica,会碰撞出怎样的火花?作为遥感数据处理领域的"瑞士军刀",Geomatica在立体像对处理上展现出的专业深度…...
