Android TV UI开发常用知识

这篇具有很好参考价值的文章主要介绍了Android TV UI开发常用知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

导入依赖

Google官方为Android TV的UI开发提供了一系列的规范组件,在leanback的依赖库中,这里介绍一些常用的组件,使用前需要导入leanback库。

    implementation 'androidx.leanback:leanback:$version'

常用的页面

这些Fragment有设计好的样式,只需要根据场景选择对应的Fragment,并往里面填充内容即可。

1. BrowseSupportFragment

可以理解为一个水平的tab页面。左边是tab,右边是tab对应的数据。
Android TV UI开发常用知识

2. VerticalGridSupportFragment

内部是ViewticalGridView的页面。
Android TV UI开发常用知识

3. GuidedStepSupportFragment

左边是描述,右边是选项的设置页面。
Android TV UI开发常用知识

4. ErrorSupportFragment

信息加按钮的页面。
Android TV UI开发常用知识

5. LeanbackSettingsFragment

右侧弹出的设置页面,里面加载一个PreferenceFragment.
Android TV UI开发常用知识

常用组件

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 焦点移动飞框的实现文章来源地址https://www.toymoban.com/news/detail-466349.html

一些细节

  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经常被用到测试中

到了这里,关于Android TV UI开发常用知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android Compose UI实战练手----Google Bloom欢迎页

    在之前的博客中,我已经介绍了Compose 的基础UI和布局组件,现在我们就利用这些基础UI和布局组件去做一个实战项目。Bloom是Google提供的一个假想产品,我们可以作为练手项目使用,这个产品的详细UI设计稿大家可以自行去百度下,个人决定这里主要是熟练去使用Compose UI,不

    2024年02月09日
    浏览(40)
  • [技术篇] Android11上导入GMS后,登录Google账号提示“您的账号未成功添加”问题。

    在项目中导入Google框架,Google相关功能可以正常使用。 1、首先下载Google框架GMS包,可以在The Open GApps Project网站下载。选择相关配置后下载即可,有些包比较大,下载需要耐心等待一下,最好用外网下载会快一些。  2、由于本人使用的TV平台,Google版本需要使用手机版,不能

    2024年02月05日
    浏览(48)
  • 【Android Gradle 插件】Android 依赖管理 ④ ( 常用依赖配置分析 | implementation 依赖作用 | api 依赖作用 | compileOnly 依赖作用 )

    在本篇博客中逐一分析以下依赖配置 : implementation api compileOnly runtimeOnly annotationProcessor lintChecks lintPublish apk ( 已废弃 ) compile ( 已废弃 ) provided ( 已废弃 ) Android 依赖参考文档 : https://developer.android.google.cn/studio/build/dependencies compile 依赖作用: 编译打包 : 为 自己的项目模块 添加依

    2024年02月02日
    浏览(50)
  • 安卓原生电视盒子首次激活连不上wifi? Google tv adb命令 修改网络访问限制,禁用本地桌面 启用emotnUI

    安卓原生电视盒子首次激活连不上wifi? 软路由里把time.android.com劫持到 203.107.6.88(阿里云的ntp服务器)就能解决原生安卓时间不对的问题 了 clash 规则加入 - DOMAIN-SUFFIX,googleapis.com,xxxx #xxxx是你需要配置的名字 OpenWRT 具体步骤:openwrt—网络----dhcp/dns----host和解析文件拉到最下边-

    2024年02月04日
    浏览(41)
  • 推荐Java开发常用的工具类库google guava

    Guava Guava是一个Google开源的Java核心库,它提供了许多实用的工具和辅助类,使Java开发更加简洁、高效、可靠。目前和 hutool 一起,是业界常用的工具类库。 shigen 也比较喜欢使用,在这里列举一下常用的工具类库和使用的案例。 参考: 整理一波Guava的使用技巧 - 掘金 Guava中这

    2024年02月09日
    浏览(43)
  • 如何在Android studio导入jdk9及以上版本中依赖包,如'rt.jar',' dt.jar'等

    1、如何获取jdk9及以上版本中依赖包,如\\\'rt.jar\\\',\\\' dt.jar\\\'等 ​在jdk9及后续版本中,jdk开始使用模块化规则,实现更好的封装和定义良好的接口,近一步加强了java的自由度,开发者可以定制化SDK ​包括rt.jar在内的依赖均已移除,以模块化形式更高效的存诸在 JAVA_HOME/jmods 目录下

    2023年04月25日
    浏览(48)
  • Flutter Android开发 梳理Google Material Design颜色体系

    做安卓开发(Kotlin语言),Flutter开发的人员应该都听说过谷歌一直推崇的Material Design,而Material Design Color是其推崇的颜色体系,具体来说,Material Design Color是一套旨在帮助设计师和开发者创建视觉吸引力和一致性界面的指南。它不仅包括了丰富的颜色选择,还提供了如何有效

    2024年02月20日
    浏览(38)
  • 使用树莓派打造Android TV盒子

    树莓派是一款功能强大且灵活的单板计算机,它可以用于各种创意项目。在本文中,我们将介绍如何使用树莓派搭建一个Android TV盒子,使你可以在电视上享受Android系统的各种应用和功能。 步骤1:准备所需材料 要开始构建你的Android TV盒子,你需要准备以下材料: 树莓派:建

    2024年02月04日
    浏览(50)
  • Android TV:自定义Leanback的VideoDetailsFragment

    在Android studio新建TV项目的demo上做修改,实现一下需求: 1、去掉顶部背景区域 2、修改中间详情区域高度 3、修改整体背景界面 效果如图: 搜遍全网,没有找到一个解决方案。只能考自己看代码来自定义实现了。 VideoDetailsFragment中重写setupDetailsOverviewRowPresenter方法,去掉其中

    2024年02月12日
    浏览(31)
  • 【Android知识笔记】UI体系(二)

    常说的UI线程到底是哪个线程?UI线程一定是主线程吗? 下面先给出两条确定的结论: UI线程就是刷新UI所在的线程 UI是单线程刷新的 关于第二条为什么UI只能是单线程刷新的呢?道理很简单, 因为多线程访问的话需要加锁 ,太卡,所以一般系统的UI框架都是采用单线程实现

    2024年02月15日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包