Android TV UI开发常用知识

news2025/1/14 18:35:39

导入依赖

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() {
            @Override
            public void onChildViewHolderSelected(RecyclerView parent, RecyclerView.ViewHolder child, int position, int subposition) {
                super.onChildViewHolderSelected(parent, child, position, subposition);
                Log.d(TAG, "onChildViewHolderSelected() returned: " + position);
                //大部分情况下可以通过该方法获取到position
 
            }
 
            @Override
            public 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 焦点移动飞框的实现

一些细节

  1. 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);
}
  1. View获取焦点的方法是requestFocus()
  2. Android instrumentation是Android系统里面的一套控制方法或者”钩子“。通过Instrumentation可以用来模拟用户的操作,如按键或者点击事件,因此Instrumentation经常被用到测试中

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/379321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RocketMQ的一些使用理解

1.RocketMQ的生产者生产负载策略&#xff08;3种&#xff09; (1)SelectMessageQueueByHash &#xff08;一致性hash&#xff09; (2)SelectMessageQueueByMachineRoom &#xff08;机器随机&#xff09; (3)SelectMessageQueueByRandom &#xff08;随机&#xff09; 第1种一…

字符流定义及如何深入理解字符流的编码

IputSrem类和OupuSrem类在读写文件时操作的都是字节&#xff0c;如果希望在程序中操作字符&#xff0c;使用这两个类就不太方便&#xff0c;为此JDK提供了字符流。同字节流样&#xff0c;字符流也有两个抽象的顶级父类&#xff0c;分别是Reader和Writer其中&#xff0c;Reader是…

Nvidia jetson nano硬件架构

资料来源 官方文档中心 https://developer.nvidia.com/embedded/downloads -> 选jetson -> Jetson Nano Product Design Guide //产品设计指导(入口) //-> 1.1 References 列出了相关的文档 -> Jetson Nano Developer Kit Carrier Board Specification //板子标注…

MySQL实战之深入浅出索引(下)

1.前言 在上一篇文章中&#xff0c;我们介绍了InnoDB索引的数据结构模型&#xff0c;今天我们再继续聊一下跟MySQL索引有关的概念。 在介绍之前&#xff0c;我们先看一个问题&#xff1a; 表初始化语句 mysql> create table T ( ID int primary key, k int NOT NULL DEFA…

LeetCode 1237. Find Positive Integer Solution for a Given Equation【双指针,二分,交互】

本文属于「征服LeetCode」系列文章之一&#xff0c;这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁&#xff0c;本系列将至少持续到刷完所有无锁题之日为止&#xff1b;由于LeetCode还在不断地创建新题&#xff0c;本系列的终止日期可能是永远。在这一系列刷题文章…

Linux学习--重定向

重定向的意思是&#xff0c;将数据传到其他地方。 符号解释>输出覆盖重定向>>输出追加重定向<或<<标准输入重定向 1、读取文件内容且写入到另一个文件中&#xff0c;覆盖写入文件内容 cat haha.txt > xixi.txt2、追加写入文件内容 cat haha.txt >&g…

2023,年轻人不想买钻石了?

【潮汐商业评论/ 原创】“钻石恒久远&#xff0c;一颗永流传。”很明显&#xff0c;Lily就是这句话的“受害者”。临近婚期的她&#xff0c;在婚戒的选择上犯起了愁&#xff0c;“我现在想到买钻戒&#xff0c;我就头大。买小的凑合一下&#xff0c;耳边传来的都是‘别买一克拉…

Linux命令篇 linux命令大全简洁明了 linux学习笔记

Linux命令篇 linux命令大全简洁明了 linux学习笔记 Linux 命令大全 文章目录Linux 命令大全一、 常用的基础命令查看目录&#xff1a;切换目录&#xff1a;创建和删除&#xff1a;拷贝和移动文件&#xff1a;查看文件内容&#xff1a;其他&#xff1a;小技巧终端命令格式1.1 ls…

如何用3个月零基础入门网络安全?

背景 写这篇教程的初衷是很多朋友都想了解如何入门/转行网络安全&#xff0c;实现自己的“黑客梦”。文章的宗旨是&#xff1a;1.指出一些自学的误区 2.提供客观可行的学习表 3.推荐我认为适合小白学习的资源.大佬绕道哈&#xff01; 一、自学网络安全学习的误区和陷阱 1.不…

基于Conda完成创建多版本python环境

文章目录基于Conda完成创建多版本python环境基于Conda完成创建多版本python环境 通过cmd打开conda环境 d:\ProgramData\Anaconda3\Scripts\activate创建python3.7的环境 conda create -n py3.7 python3.7产生错误 Collecting package metadata (repodata.json): failed Unav…

IEEE14节点系统在如短路分析,潮流研究,互连电网中的研究(Simulink)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

MIMO信道的稀疏性

一. 介绍 本文章将从“信道冲激响应”的角度解释为什么MIMO信道具有稀疏性&#xff0c;公式较多&#xff0c;需要了解以下先验知识&#xff1a; 信道相干带宽与传输信号带宽 带宽与宽带 平坦衰落与频率选择性衰落 信道冲击响应 基带与射频 多径传输与最大传播时延 基带带宽是信…

6个必知的Mysql索引失效场景,别再踩坑了!

今天我来聊聊索引的相关问题&#xff0c;因为索引是大家都比较关心的公共话题&#xff0c;确实有很多坑。不知道你在实际工作中&#xff0c;有没有遇到过下面的这两种情况&#xff1a;明明在某个字段上加了索引&#xff0c;但实际上并没有生效。索引有时候生效了&#xff0c;有…

Linux字符设备驱动模型之设备号

从上文中可知&#xff0c;在Linux用户空间中&#xff0c;如若需要操作硬件设备&#xff0c;均通过/dev目录下的设备文件节点进行操作&#xff0c;基本上每一种设备都会存在一个或者多个的设备节点。 并且在Linux内核中&#xff0c;其表示字符设备的结构成员也提供了相应的设备号…

论文投稿指南——中文核心期刊推荐(外国语言)

【前言】 &#x1f680; 想发论文怎么办&#xff1f;手把手教你论文如何投稿&#xff01;那么&#xff0c;首先要搞懂投稿目标——论文期刊 &#x1f384; 在期刊论文的分布中&#xff0c;存在一种普遍现象&#xff1a;即对于某一特定的学科或专业来说&#xff0c;少数期刊所含…

【学习】笔记本电脑重新安装系统win10

安装系统有很多方法: 软件安装制作启动u盘本文使用的方法就是启动盘安装: 1.首先下载iso镜像文件: msdn我告诉你:MSDN, 我告诉你 - 做一个安静的工具站 (itellyou.cn) 2.下载启动盘制作工具: 制作启动盘rufus:Rufus - 轻松创建 USB 启动盘 3.官网下载: https://do…

【设计模式】18.观察者模式

概述 定义&#xff1a; 又被称为发布-订阅&#xff08;Publish/Subscribe&#xff09;模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时&#xff0c;会通知所有的观察者对象&#xff0c;使他们能…

Word控件Spire.Doc 【书签】教程(2):在 C#、VB.NET 中删除书签

Spire.Doc for .NET是一款专门对 Word 文档进行操作的 .NET 类库。在于帮助开发人员无需安装 Microsoft Word情况下&#xff0c;轻松快捷高效地创建、编辑、转换和打印 Microsoft Word 文档。拥有近10年专业开发经验Spire系列办公文档开发工具&#xff0c;专注于创建、编辑、转…

2023年智能轨道,交通与运输工程国际会议(ICSTTE 2023)

重要信息 会议网址&#xff1a;www.icstte.org 会议时间&#xff1a;2023年7月28-30日 召开地点&#xff1a;长沙 截稿时间&#xff1a;2023年6月20日 录用通知&#xff1a;投稿后2周内 收录检索&#xff1a;EI,Scopus 会议简介 ★2023年智能轨道&#xff0c;交通与运输工…

UWB到底是什么技术?

什么是空间感知能力 所谓的空间感知能力&#xff0c;就是感知方位的能力。更直接一点&#xff0c;就是定位能力。说白了&#xff0c;利用UWB技术&#xff0c;手机和智能设备可以更精准地实现室内定位&#xff0c;不仅可以感知自己的位置&#xff0c;还可以感知周边其它手机或设…