导入依赖

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 焦点移动飞框的实现

一些细节

  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开发常用知识相关推荐

  1. android的UI开发工程师指引

    不管是MFC,还是linux,还是android,UI开发都是如下两大核心机制: 第一个是消息循环,第二个是界面组织结构. 围绕着这些,衍生出来的OpenGL,SurfaceView,SurfaceF ...

  2. android TV盒子开发心得(一)

    今天给大家介绍一下本人在开发android TV APP的时候所遇到的一些问题及心得体会,希望能帮助各位解决问题 首先,简单介绍一下TV开发和手机开发的不同之处: 1.我们在开发TV的时候,经常会遇到 ...

  3. Android 音视频开发相关知识

    音视频开发技能 要在Android上进行音视频开发,需要掌握以下技能: Android开发:首先,您需要掌握Android应用程序的基本开发技能,包括Java或Kotlin编程语言,Android S ...

  4. [译]MediaSession MediaController – Android TV 应用开发教程九

    版权声明:本文为博主原创翻译文章,转载请注明出处. 推荐: 欢迎关注我创建的Android TV 简书专题,会定期给大家分享一些AndroidTv相关的内容: www.jianshu.com/c/37 ...

  5. Android TV-电视开发常用知识点讲解

    在Android Tv设备开发时 app开发主要分为TV-UI,IPTV,OTT,DVB,TVOS,DEBUG等几大模块展开.这几大模块适用于常见盒子,电视等TV开发 下面就每个模块简单的做一下讲解如 ...

  6. 八年Android开发,看我如何简化Android的UI开发!

    如果你觉得这篇文章太长,而且还没有往下阅读的话,我可以给你简要的介绍文章要讲的内容:我使用纯 Java 通过数据绑定的方式提供了一种 免费在线视频http://www.xincaopeng.com A ...

  7. Android TV机顶盒开发总结

    写在前面 前几天看了LOL洲际赛.好久没赢的LPL赢了,嗯对,抗韩成功了,心血澎拜到想写篇大作.然而总感觉怪怪的,想想算了吧.当LetMe传送拆塔偷掉对方基地的时候,解说忍不住哭了.是的,LPL太需要 ...

  8. Android TV UI 设计指南 《一》

    随着国际市场上Google TV的发布和国内电视厂商纷纷推出定制Android TV的脚步,一时间智能电视平台成为了众多高科技企业争相抢占的新市场.较早的智能电视平台探索者有Google TV.App ...

  9. Android移动应用开发基础知识整理

    Android移动应用开发 9.13笔记 自带模拟器运行程序出现adb问题:需要配置环境变量. adb简介:安卓调试桥,模拟器与开发环境的连接,也需要配置环境变量. 1)运行程序时显示和功能逻辑分离( ...

最新文章

  1. stc51单片机怎么学, 先掌握STC单片机程序烧录方法
  2. C++ cin相关函数总结
  3. 每日记载内容总结44
  4. golang 常量简介
  5. VMDNS服务器未响应,vmware克隆虚拟机后进行网络配置
  6. python http协议获取对方的ip地址_http协议(一)基础知识
  7. 安卓分辨率_免费的安卓群控1数字云免费安卓群控系统
  8. IREC-GAN:在线推荐中基于模型的对抗训练强化学习
  9. devc运行窗口不显示_编写Qt多窗口程序
  10. PostgreSQL安装及关联ArcMap
  11. 超级全面的MySQL优化面试解析
  12. csgo 简单发光透视
  13. 计算机组成原理期末知识点复习及考点总结
  14. 第十五届全国大学生智能汽车竞赛华南赛区获奖信息
  15. BH1750光照传感器
  16. VSCode的常用快捷键
  17. fopen打开文件名(文件路径含中文或韩语)方法测试
  18. MFC 屏蔽ESC键和ENTER键关闭对话框的方法
  19. 计算机网络工程报告,计算机网络工程实习报告
  20. 蓝桥杯单片机第四届省赛题详细讲解(模拟智能灌溉系统)

热门文章

  1. 领奖台数/三元数组对
  2. 第九章 SQL聚合函数 MIN
  3. Python-辨析type/dtype/astype用法
  4. qt运行时插件目录设置
  5. Autodesk 3ds Max 2021
  6. 使用证据理论和GMM模型进行图像分割(其他博客未提到的细节记录)
  7. 【项目三、车牌检测+识别项目】一、CCPD车牌数据集转为YOLOv5格式和LPRNet格式
  8. python绘制基本初等函数(一)
  9. 贝叶斯概率矩阵分解理解
  10. 方向导数和梯度的区别