Android TV开发规范

一.Android TV概述

Android TV应用使用与手机和平板电脑相同的架构,这就意味着我们可以根据已经了解的有关构建Android应用的方法去构建新的电视应用程序,或者将现有的应用程序拓展到电视设备上去运行。

二.创建电视应用

Android提供了丰富的用户体验,针对大屏幕的设备(如Android TV)上运行的应用进行了优化。TV的用交互与平板和手机设备有很大的不同,为了在TV设备上构建更好的应用程序,我们必须设计可以在10英尺外能轻松理解的布局,并提供仅使用方向键和选择按钮的导航。

2.1 创建TV项目

创建在TV上运行的应用程序需要的两个主要组件:

  • Action for TV(必填)-在应用的manifest中,声明要在TV上运行的Activity。
  • TV Support Libraries(可选)-支持库提供了用于创建在TV设备上运行的部件。
    前提条件:
  • 将SDK工具更新至24.0.0或更高版本
    更新SDK工具可以构建和测试电视应用程序
  • 将SDK升级到Android 5.0(API 21)或者更高
    更行后的平台版本给应用提供了新的API
  • 创建或升级项目
    为了在TV设备上使用新的API,在创建或者修改已经存在的项目时,必须将目标设置为Android 5.0(API 21)或者更高
2.1.1 声明一个TV的Activity

应用要在TV上运行,必须在清单文件中声明一个可以启动的Activity,使用CATEGORY_LEANBACK_LAUNCHER Intent filter来执行此操作。这个filter能够标识应用可以能够在TV上使用和让Google Play将其视为TV应用。

<applicationandroid:banner="@drawable/banner" >...<activityandroid:name="com.example.android.TvActivity"android:label="@string/app_name"android:theme="@style/Theme.Leanback"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LEANBACK_LAUNCHER" /></intent-filter></activity>
</application>
2.1.2 声明支持Leanback

声明应用使用Android TV所需的Leanback用户界面。如果开发移动设备(手机,可穿戴设备,平板电脑等)以及Android TV上运行的应用,将required属性设置为false;如果设置为true,则应用仅能运行在使用Leanback UI的设备上。

<manifest><uses-feature android:name="android.software.leanback"android:required="false" />...
</manifest>
2.1.3 声明不要触摸屏

清单文件中必须声明android.hardware.touchscreen这个功能不需要。这个设置将应用标识为能在电视设备运行并且Google Play将其视为TV应用,否则不会出现在电视设备上的Google Play中。

<manifest><uses-feature android:name="android.hardware.touchscreen"android:required="false" />...
</manifest>
2.1.4 提供桌面banner

Banner是显示在桌面的应用的启动入口。Banner应该是xhdpi资源,大小为320 * 180,图片中必须包含文字。如果app支持多语言,则必须为每个支持的语言提供单独版本的banner文字。

<application ... android:banner = “@ drawable / banner” >     ... </ application>
2.2电视硬件处理

电视硬件与其他Android设备不同,电视上不包括其他Android设备上的某些硬件功能,如触摸屏,相机和GPS。在创建应用程序时,必须考虑电视硬件和要求。

2.2.1 检测电视设备

如果应用同时在TV和其他设备上操作则需要检测应用运行的设备并调整操作。确定是否在TV上运行推荐使用UiModeManager.getCurrentModeType()方法检查。

2.2.2不支持的硬件功能
Hardware Android feature descriptor
Touchscreen android.hardware.touchscreen
Touchscreen emulator android.hardware.faketouch
Telephony android.hardware.telephony
Camera android.hardware.camera
Near Field Communications (NFC) android.hardware.nfc
GPS android.hardware.location.gps
Microphone android.hardware.microphone
Sensors android.hardware.sensor
Screen in portrait orientation android.hardware.screen.portrait
2.2.3 声明电视硬件要求

在应用清单中声明硬件功能要求以确保应用不会安装在不提供这些功能的设备上,所有在电视设备上使用的应用必须声明不需要触摸屏功能。

<uses-feature android:name="android.hardware.touchscreen"android:required="false"/>
<uses-feature android:name="android.hardware.faketouch"android:required="false"/>
<uses-feature android:name="android.hardware.telephony"android:required="false"/>
<uses-feature android:name="android.hardware.camera"android:required="false"/>
<uses-feature android:name="android.hardware.nfc"android:required="false"/>
<uses-feature android:name="android.hardware.location.gps"android:required="false"/>
<uses-feature android:name="android.hardware.microphone"android:required="false"/>
<uses-feature android:name="android.hardware.sensor"android:required="false"/>
2.2.4检查硬件功能

在APP运行时,Android框架可以检测硬件功能是否可用,在运行时使用hasSystemFeature(String)检测特定功能是否可用。

// Check if android.hardware.touchscreen feature is available.
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_TOUCHSCREEN)) {Log.d("HardwareFeatureTest", "Device has a touch screen.");
}
2.3电视控制管理
电视需要其他辅助设备如遥控器和游戏手柄来与应用进行交互。因此应用必须支持遥控器输入。应用可以通过上下左右,后退,主页按钮进行操作。当用户操作遥控器时,应用会收到带有Key Event的事件,应用应该与响应遥控器按钮一直的行为。
2.4电视布局创建

电视屏幕通常距离大约10英尺远,虽然TV比其他Android设备显示器大得多,但并不能提供与较小设备相同水平的颜色和细节。因此创建应用时必须考虑TV设备布局以提供好的用户体验。

2.4.1使用电视布局主题

1.使用Leanback主题
v17 leanback support library包含了Theme.Leanback,该主题提供了统一的TV视觉风格,Android强烈建议在TV应用中使用v17 leanback。

<activityandroid:name="com.example.android.TvActivity"android:label="@string/app_name"android:theme="@style/Theme.Leanback">

如果应用使用了support fragment,Activity必须继承Fragment Activity。

2.No Title 主题
标题栏是手机和平板上Android 应用的标准UI元素,不适用TV应用,如果不使用v17leanback,应用应该在Activity上禁止显示标题栏。

<application>...<activityandroid:name="com.example.android.TvActivity"android:label="@string/app_name"android:theme="@android:style/Theme.NoTitleBar">...</activity>
</application>
2.4.2电视基本布局设置

电视设备的布局应遵循一些基本准则,以确保它们在大屏幕上可用且有效。

  • 构建具有横向方向的布局。电视屏幕始终以横向模式显示。
  • 使用Fragment来创建多个区域的UI,使用GridView替代ListView让水平空间更好的利用。
  • 使用如RelativeLayout,Linear Layout等View Group来排列Ui。
  • 空间之间保持足够的边距避免UI混乱。
2.4.3 Over Scan

由于电视始终呈现全屏画面给观众,电视布局有一些独特的要求,为确保填满整个显示区,TV设备可以裁剪应用布局的外边缘。对用户一直可见的屏幕元素必须位于OverScan的安全区内。为了确保布局元素在Over Scan的安全区内,在左右边缘添加5% 的48dp,上下27dp的外边距。此方法可以确保背景元素在所有的设备都正确。如果使用了v17 leanback类(如BrowseFragment相关空间),不要设置OverScan边距,这些布局已经包含过。

2.4.4创建文本和控件

电视应用布局中的文本和控件应该很容易看到并可以远距离导航。遵循以下提示:

  • 将文本分成用户可以快速扫描的小块。
  • 深色背景使用浅色文字。
  • 避免轻量级字体或具有非常窄和非常宽的笔划的字体。使用简单的sans-serif字体和抗锯齿来提高可读性。
  • 使用Android标准字体大小:android:textAppearance="?android:attr/textAppearanceMedium"。
  • 确保所有视图窗口小部件足够大,以便与距离屏幕10英尺远的人清晰可见(对于非常大的屏幕,此距离更大)。
2.5使用leanback支持库创建电视播放应用

浏览和播放媒体文件是TV提供给用户很常用的一个体验,允许用户快速浏览并获取到所需内容非常的重要。Android v17 leanback支持库为这类应用提供了很好的框架。

2.5.1创建目录浏览

在电视上运行的媒体应用程序需要允许用户浏览其内容产品,进行选择并开始播放内容。此类应用的内容浏览体验应该简单直观。使用v17 leanback支持库提供的类来实现用户界面,以便从应用程序的媒体目录中浏览音乐或视频。Leanback支持库中的BrowseFragment可以使用最少的代码创建出媒体类别和浏览项。

2.5.2提供卡片视图

给媒体文件创建卡片视图并将他们显示到目录浏览,通常使用BaseCardView及其子类显示媒体相关数据。

2.5.3创建详情页面

V17 leanback支持库提供了媒体资源浏览界面用来显示一些附加信息(如描述,评论),以及要对该媒体做什么样的操作(如购买或者播放该内容)。DetailsFragment类用来实现媒体详情页面。

2.5.4使用leanback操控控件

Leanback支持库中的媒体播放控件提供了更好的用户体验。对于视频类应用,控件提供了视频快进快退预览,快进快退时会显示视频缩略图。Leanback支持库使得UI控制与媒体播放实现分离。

2.5.5显示正在播放的卡片

当TV 应用在后台播放媒体文件时,必须显示Now Playing 卡片。这张卡片允许用户返回到正在播放媒体的应用。当有正在运行的MediaSession时,Android会在桌面去显示Now Playing 卡片,卡片中可以包含媒体的metadata

三.帮助用户在TV上找到APP的内容

TV提供了很多的娱乐选择,来自APP及其相关服务。同时大多数用户更喜欢在使用TV时做更少的输入,因而应用应该提供快速简便的路径给用户去发现内容。

3.1 在TV上推荐内容

根据不同的Android版本,Android TV 有两种不同的方式在桌面显示推荐内容:

  • 在Android 8.0及以后版本,应用可以在一个或多个通道上显示推荐内容,内容显示在不同的行,默认行总是显示,用户可以在桌面添加其他的通道。
  • 在Android 8.0之前,TV显示所有的推荐在一个推荐行中,推荐行一直显示在桌面。
3.2 让应用内容可搜索

Android TV使用Android 搜索界面从已安装的应用中检索内容数据,并将结果返回给用户。应用的数据内容可以包含在这些结果中,以便用户及时访问。当用户在搜索框中输入字符,应用必须为Android TV提供字段,从中生成结果。因此应用必须实现Content Provider并伴随着一个描述Content Provider和一些重要信息的searchable.xml文件。当用户选择了建议的搜索结果,应用需要一个Activity去处理这个意图。
表字段:

Value Description
SUGGEST_COLUMN_TEXT_1 内容名(需要)
SUGGEST_COLUMN_TEXT_2 描述内容
SUGGEST_COLUMN_RESULT_CARD_IMAGE 内容的图片,海报,封面
SUGGEST_COLUMN_CONTENT_TYPE 媒体的MIME类型(需要)
SUGGEST_COLUMN_VIDEO_WIDTH 媒体分辨率的宽
SUGGEST_COLUMN_VIDEO_HEIGHT 媒体分辨率的高
SUGGEST_COLUMN_PRODUCTION_YEAR 内容在制作年份(需要)
SUGGEST_COLUMN_DURATION 媒体的时长(需要)

Searchable.xml:

<searchable xmlns:android="http://schemas.android.com/apk/res/android"android:label="@string/search_label"android:hint="@string/search_hint"android:searchSettingsDescription="@string/settings_description"android:searchSuggestAuthority="com.example.android.tvleanback"android:searchSuggestIntentAction="android.intent.action.VIEW"android:searchSuggestIntentData="content://com.example.android.tvleanback/video_database_leanback"android:searchSuggestSelection=" ?"android:searchSuggestThreshold="1"android:includeInGlobalSearch="true">
</searchable>

处理搜索请求:

...<activityandroid:name="com.example.android.tvleanback.DetailsActivity"android:exported="true"><!-- Receives the search request. --><intent-filter><action android:name="android.intent.action.SEARCH" /><!-- No category needed, because the Intent will specify this class component --></intent-filter><!-- Points to searchable meta data. --><meta-data android:name="android.app.searchable"android:resource="@xml/searchable" /></activity>
...<!-- Provides search suggestions for keywords against video meta data. --><provider android:name="com.example.android.tvleanback.VideoContentProvider"android:authorities="com.example.android.tvleanback"android:exported="true" />
...
3.3 TV 应用内的搜索

当在TV上使用媒体应用时,用户经常会考虑特定的内容。若果应用包含大量的内容目录,浏览标题不是用户找到所需内容的最好方式。因此搜索界面可以帮助用户更快的获取到他们想要的内容。LeanBack 支持库一组类,使应用程序的搜索界面与电视搜索功能一致,搜索页面使用包含了SearchFragment的布局,这个Fragment必须实现SearchFragment.SearchResultProvider。

四 Android TV设计准则

Android TV具有沉浸式和高分辨率,支持最佳的TV互动体验。它采用了10英尺之外的material design UI风格。与便携式设备不同,电视体验是在不同的空间内发生,并且需要在十英尺之外清晰可见。

4.1 设计原则
4.1.1 视觉创意
  • 休闲体验:人们经常以轻松的心态使用电视。休闲体验是Android TV的主要使用,在内容搜索时,每个部分都应该简单,新的内容易于被发现。减少选择的次数,默认操作只需点击一次即可。
  • 电影体验:用图片和声音去描述内容,大屏幕给高分辨率图片和视觉元素提供了创建丰富动态体验的机会。在过渡和反馈操作期间使用移动。
  • 轻量级的互动:最大限度地减少执行操作所需的导航步骤数,尽可能避免让用户输入文本,并在需要输入文本时使用语音界面。
4.1.2 为TV设计的应用

适合电视的应用

  • Should:包含简单的设置,利用有限放大屏幕,共享公共资源,突出主要的内容。
  • Should not:文字量大,注重任务管理。

简单的导航

  • TV应该为内容选择提供快捷的操作路径。

信息密度

  • Should:默认显示最重要和最必要的信息,使用滚动会渐进来展示内容。

    Should not:避免过度显示,不要一次显示多有内容。

4.2 App导航

4.2.1 焦点

焦点总在一个对象上。文字,按钮,卡片或其他元素都可以获取焦点,要清楚的表明哪个被选择或者获取到了焦点。

  • 焦点可见:获取焦点的和没有获取的要有对比区别。
    -
    反馈:在有焦点和没焦点之间切换时给用户视觉上的反馈。在焦点改变时或者有选中时,TV也有声音上的反馈。
4.2.2 结构设计
  • 明确的方向操作:控件放置不与其他可操作的控件重叠,例如搜索操作,避免在很难操控到的位置摆放控件。

    Do

    Do not
  • 轴:设计布局时利用水平与垂直轴,为每个方向指定特定功能,使大型的层次结构可以快速的导航。

    Do

    Do not
4.3 TV应用程序

浏览页:浏览页是TV应用程序常用入口,通过类别使用户可以方便浏览。

详细页:详细页提供了所选内容的相关描述,讲可操作的内容和详细信息放在屏幕立即可见的位置,不需要滑动。

App搜索:提供快速搜索应用内容的方法。

Dialog:
在左侧为用户提供所需的内容,强烈建议包含相关的描述。

默认焦点应该始终位于Key Line上,用户选择后应该跳转到下一屏或关闭对话框。

App设置:
建议将设置放在最后一栏,设置应该显示在设置面板中。

Color:如果强调色太浅,使用较暗的背景色,不要使用较为鲜艳的颜色尤其是作为白色文字的背景。

字体样式:

主色调:在应用的整个UI中使用一致的颜色方案,例如卡片,浏览栏,控制条,背景图像等。

android TV 开发规范相关推荐

  1. android tv 云播放器,Android TV开发总结(六)构建一个TV app的直播节目实例

    近年来,Android TV的迅速发展,传统的有线电视受到较大的冲击,在TV上用户同样也可以看到各个有线电视的直播频道,相对于手机,这种直播节目,体验效果更佳,尤其是一样赛事节目,大屏幕看得才够痛快, ...

  2. Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    原文:Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑 版权声明:我已委托"维权骑士"(rightknights.com)为我的文章进行维权行动.转载务必 ...

  3. 【Android TV 开发】焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设备上的兼容问题 | 触摸获取焦点 | 按键获取焦点 )

    Android TV 开发系列文章目录 [Android TV 开发]安卓电视调试 ( 开启网络远程调试 ) [Android TV 开发]焦点处理 ( 父容器与子组件焦点获取关系处理 | 不同电视设 ...

  4. android tv 菜单键,Android TV开发总结(三)构建一个TV app的焦点控制及遇到的坑

    前言:关于<TV Metro界面(仿泰捷视频TV版)源码解析>由于都是相关代码,就不发公众号了,有兴趣的可以看链接:http://blog.csdn.net/hejjunlin/artic ...

  5. android 仿 tv 菜单,Android TV 开发之仿泰捷视频最新 TV 版 Metro UI 效果

    Some Android TV related Sample 更多TV相关,欢迎关注公众号: Android TV开发交流群:135622564 1.Imitation of tai jie late ...

  6. android 按键分析,Android TV开发按键与焦点深入分析(四)

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 前面三篇都是从源码的角度分析按键事件.焦点变换的原理,作为应用层的开发者, 分析源码都是带着实际的开发困惑的,要不然谁没 ...

  7. Android TV开发:APP安装、ICON图标问题

    使用AndroidX版本的Android Studio开发的面向TV的APK,安装后,在电视默认主屏没有显示该APP的ICON,是怎么回事? 一开始没有注意到电视的Android版本,安装APK时出现 ...

  8. 聊聊真实的 Android TV 开发技术栈

    智能电视越来越普及了,华为说四月发布智能电视跳票了,一加也说今后要布局智能电视,在智能电视方向,小米已经算是先驱了.但是还有不少开发把智能电视简单的理解成手机屏幕的放大,其实这两者并不一样. 一.序 ...

  9. Android TV 开发有关PopupWindow的KeyListener(手机也能用)

    转载请标明原地址:Android TV 开发有关PopupWindow的KeyListener(手机也能用)_高磊的专栏-CSDN博客 现在这个公司主要是做智能电视视频方面.有硬件电视盒子,APP开发 ...

  10. Android TV 开发 (1)

    本文来自网易云社区 作者:孙有军 前言 这里主要记录几个TV问题的解决方案,如果对这个不感兴趣的其实就不用往下看了. 这几天有一个需求就是要求出一个TV版本的app,之前没有具体的了解Tv版的app有 ...

最新文章

  1. SQL Server审计功能入门:CDC(Change Data Capture)
  2. Linux学习笔记-题记
  3. OAF_EO系列2 - Validation数据校验验证机制(概念)
  4. kafka在zk中的目录
  5. php下的原生ajax请求
  6. C#字符串、字节数组和内存流间的相互转换 - IT浪潮之巅
  7. 操作系统【六】虚拟内存
  8. 9.获取当前时区时间和utc时间的工具方法
  9. jquery on方法原理_jQuery 学习小结
  10. 分页offset格式_MySQL中limit分页查询性能问题分析
  11. Django菜鸟教程学习记录(一)
  12. 微信小游戏开发新手教程1-人人都能做游戏
  13. keras学习笔记--交叉熵
  14. 北京理工大学计算机学院acm赵曜,王一拙_北京理工大学计算机学院
  15. 荐书丨10 本豆瓣高分技术图书,强烈推荐!
  16. 逆置单链表——递归与非递归
  17. Python使用RMF聚类分析客户价值
  18. 如何通过供应链管理来居家做菜?
  19. Wannafly挑战赛26 御坂网络
  20. 判断一个树是否为二叉查找树

热门文章

  1. 世界著名半导体公司及其官网
  2. Mac和Windows系统中ssh密钥的生成和共享
  3. 「目标检测算法」连连看:从Faster R-CNN 、 R-FCN 到 FPN
  4. Windows常见错误
  5. 数据结构——循环队列
  6. 联想thinkpad e430 设置u盘启动
  7. vga焊接线顺序_vga线序是怎么排列的?
  8. 手机黑圆点怎么打_两个字中间的圆点怎么打?黑色圆点符号怎么打出来?
  9. LightBox -灯箱效果插件(非常漂亮) Jquery灯箱效果
  10. 转载:wps怎么制作半圆形时间轴? wps彩色时间轴的制作方法