Android TV应用使用与手机和平板电脑相同的架构,这就意味着我们可以根据已经了解的有关构建Android应用的方法去构建新的电视应用程序,或者将现有的应用程序拓展到电视设备上去运行。
Android提供了丰富的用户体验,针对大屏幕的设备(如Android TV)上运行的应用进行了优化。TV的用交互与平板和手机设备有很大的不同,为了在TV设备上构建更好的应用程序,我们必须设计可以在10英尺外能轻松理解的布局,并提供仅使用方向键和选择按钮的导航。
创建在TV上运行的应用程序需要的两个主要组件:
应用要在TV上运行,必须在清单文件中声明一个可以启动的Activity,使用CATEGORY_LEANBACK_LAUNCHER Intent filter来执行此操作。这个filter能够标识应用可以能够在TV上使用和让Google Play将其视为TV应用。
...
声明应用使用Android TV所需的Leanback用户界面。如果开发移动设备(手机,可穿戴设备,平板电脑等)以及Android TV上运行的应用,将required属性设置为false;如果设置为true,则应用仅能运行在使用Leanback UI的设备上。
...
清单文件中必须声明android.hardware.touchscreen这个功能不需要。这个设置将应用标识为能在电视设备运行并且Google Play将其视为TV应用,否则不会出现在电视设备上的Google Play中。
...
Banner是显示在桌面的应用的启动入口。Banner应该是xhdpi资源,大小为320 * 180,图片中必须包含文字。如果app支持多语言,则必须为每个支持的语言提供单独版本的banner文字。
... application>
电视硬件与其他Android设备不同,电视上不包括其他Android设备上的某些硬件功能,如触摸屏,相机和GPS。在创建应用程序时,必须考虑电视硬件和要求。
如果应用同时在TV和其他设备上操作则需要检测应用运行的设备并调整操作。确定是否在TV上运行推荐使用UiModeManager.getCurrentModeType()方法检查。
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 |
在应用清单中声明硬件功能要求以确保应用不会安装在不提供这些功能的设备上,所有在电视设备上使用的应用必须声明不需要触摸屏功能。
在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.");
}
电视需要其他辅助设备如遥控器和游戏手柄来与应用进行交互。因此应用必须支持遥控器输入。应用可以通过上下左右,后退,主页按钮进行操作。当用户操作遥控器时,应用会收到带有Key Event的事件,应用应该与响应遥控器按钮一直的行为。
电视屏幕通常距离大约10英尺远,虽然TV比其他Android设备显示器大得多,但并不能提供与较小设备相同水平的颜色和细节。因此创建应用时必须考虑TV设备布局以提供好的用户体验。
1.使用Leanback主题
v17 leanback support library包含了Theme.Leanback,该主题提供了统一的TV视觉风格,Android强烈建议在TV应用中使用v17 leanback。
如果应用使用了support fragment,Activity必须继承Fragment Activity。
2.No Title 主题
标题栏是手机和平板上Android 应用的标准UI元素,不适用TV应用,如果不使用v17leanback,应用应该在Activity上禁止显示标题栏。
...
...
电视设备的布局应遵循一些基本准则,以确保它们在大屏幕上可用且有效。
由于电视始终呈现全屏画面给观众,电视布局有一些独特的要求,为确保填满整个显示区,TV设备可以裁剪应用布局的外边缘。对用户一直可见的屏幕元素必须位于OverScan的安全区内。为了确保布局元素在Over Scan的安全区内,在左右边缘添加5% 的48dp,上下27dp的外边距。此方法可以确保背景元素在所有的设备都正确。如果使用了v17 leanback类(如BrowseFragment相关空间),不要设置OverScan边距,这些布局已经包含过。
电视应用布局中的文本和控件应该很容易看到并可以远距离导航。遵循以下提示:
浏览和播放媒体文件是TV提供给用户很常用的一个体验,允许用户快速浏览并获取到所需内容非常的重要。Android v17 leanback支持库为这类应用提供了很好的框架。
在电视上运行的媒体应用程序需要允许用户浏览其内容产品,进行选择并开始播放内容。此类应用的内容浏览体验应该简单直观。使用v17 leanback支持库提供的类来实现用户界面,以便从应用程序的媒体目录中浏览音乐或视频。Leanback支持库中的BrowseFragment可以使用最少的代码创建出媒体类别和浏览项。
给媒体文件创建卡片视图并将他们显示到目录浏览,通常使用BaseCardView及其子类显示媒体相关数据。
V17 leanback支持库提供了媒体资源浏览界面用来显示一些附加信息(如描述,评论),以及要对该媒体做什么样的操作(如购买或者播放该内容)。DetailsFragment类用来实现媒体详情页面。
Leanback支持库中的媒体播放控件提供了更好的用户体验。对于视频类应用,控件提供了视频快进快退预览,快进快退时会显示视频缩略图。Leanback支持库使得UI控制与媒体播放实现分离。
当TV 应用在后台播放媒体文件时,必须显示Now Playing 卡片。这张卡片允许用户返回到正在播放媒体的应用。当有正在运行的MediaSession时,Android会在桌面去显示Now Playing 卡片,卡片中可以包含媒体的metadata
TV提供了很多的娱乐选择,来自APP及其相关服务。同时大多数用户更喜欢在使用TV时做更少的输入,因而应用应该提供快速简便的路径给用户去发现内容。
根据不同的Android版本,Android TV 有两种不同的方式在桌面显示推荐内容:
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:
处理搜索请求:
...
...
...
当在TV上使用媒体应用时,用户经常会考虑特定的内容。若果应用包含大量的内容目录,浏览标题不是用户找到所需内容的最好方式。因此搜索界面可以帮助用户更快的获取到他们想要的内容。LeanBack 支持库一组类,使应用程序的搜索界面与电视搜索功能一致,搜索页面使用包含了SearchFragment的布局,这个Fragment必须实现SearchFragment.SearchResultProvider。
Android TV具有沉浸式和高分辨率,支持最佳的TV互动体验。它采用了10英尺之外的material design UI风格。与便携式设备不同,电视体验是在不同的空间内发生,并且需要在十英尺之外清晰可见。
适合电视的应用
简单的导航
信息密度
焦点总在一个对象上。文字,按钮,卡片或其他元素都可以获取焦点,要清楚的表明哪个被选择或者获取到了焦点。
浏览页:浏览页是TV应用程序常用入口,通过类别使用户可以方便浏览。
详细页:详细页提供了所选内容的相关描述,讲可操作的内容和详细信息放在屏幕立即可见的位置,不需要滑动。
App搜索:提供快速搜索应用内容的方法。
Dialog:
在左侧为用户提供所需的内容,强烈建议包含相关的描述。
默认焦点应该始终位于Key Line上,用户选择后应该跳转到下一屏或关闭对话框。
App设置:
建议将设置放在最后一栏,设置应该显示在设置面板中。
Color:如果强调色太浅,使用较暗的背景色,不要使用较为鲜艳的颜色尤其是作为白色文字的背景。
字体样式:
主色调:在应用的整个UI中使用一致的颜色方案,例如卡片,浏览栏,控制条,背景图像等。