电视屏幕通常从约 10 英尺(约 3 米)的距离观看,虽然它比大多数其他 Android 设备显示屏大得多,但电视屏幕提供的细节和色彩水平不如小型设备屏幕。这些因素要求您在设计应用布局时考虑 TV 设备,以创建有用且愉悦的用户体验。
使用 TV 布局主题
Android 主题可以为您的 TV 应用布局提供基础。使用主题来修改旨在 TV 设备上运行的应用 activity 的显示。本节解释了要使用哪些主题。
Leanback 主题
androidx.leanback 库包含 Theme.Leanback,这是一个为 TV activity 提供一致视觉风格的主题。对于使用 AndroidX Leanback 类构建的任何 TV 应用,请使用此主题。以下代码示例展示了如何将此主题应用于 activity
<activity android:name="com.example.android.TvActivity" android:label="@string/app_name" android:theme="@style/Theme.Leanback">
NoTitleBar 主题
标题栏是 Android 手机和平板电脑应用的标准用户界面元素,但它不适用于 TV 应用。如果您不使用 AndroidX Leanback 类,请将 NoTitleBar 主题应用于您的 TV activity,以禁止显示标题栏。以下是来自 TV 应用 manifest 的代码示例,演示了如何应用此主题来移除标题栏的显示
<application> ... <activity android:name="com.example.android.TvActivity" android:label="@string/app_name" android:theme="@android:style/Theme.NoTitleBar"> ... </activity> </application>
AppCompat 主题
在 Android 移动应用中,通常将 AppCompatActivity 与 Theme.AppCompat 主题之一结合使用。这种组合允许您使用可绘制 tinting 等功能,而无需担心设备上运行的 Android 版本。如果您正在开发的应用程序仅在 Android TV 上运行,请勿使用 AppCompatActivity,因为它启用的功能要么已在 Android TV 上可用,要么不相关。
如果您正在构建一个在 Android 移动设备和 Android TV 之间共享代码库的应用,您可能会因为主题设置而遇到一些挑战。AppCompatActivity 和各种 AppCompat 微件要求您使用 Theme.AppCompat,而 Leanback UI 工具包 fragment 则期望您使用 FragmentActivity 和 Theme.Leanback。
如果您需要在 Android 移动设备和 Android TV 上使用相同的基本 activity,或者您想使用基于 AppCompat 微件(如 AppCompatImageView)的自定义视图,请使用 Theme.AppCompat.Leanback 主题。这些主题提供了所有来自 AppCompat 的主题设置,并提供了 Leanback 特定的值。
您可以像自定义任何其他主题一样自定义 Theme.AppCompat.Leanback 主题。例如,如果您想更改 Leanback UI 工具包的 OnboardingSupportFragment 特定的值,请执行类似以下操作
<style name="MyOnboarding" parent="Theme.AppCompat.Leanback.Onboarding"> <item name="onboardingLogoStyle">@style/MyOnboardingLogoStyle</item> <item name="onboardingPageIndicatorStyle">@style/MyOnboardingPageIndicatorStyle</item> </style>
构建基本的 TV 布局
TV 设备的布局必须遵循一些基本准则,以确保它们在大屏幕上可用且有效。请遵循以下提示来构建针对 TV 屏幕优化的布局
- 构建横向布局。TV 屏幕始终以横向模式显示。
- 将屏幕导航控件放在屏幕的左侧或右侧,并将垂直空间留给内容。
- 使用 fragment 将界面划分为多个部分。使用
GridView等视图组,而不是ListView,以更好地利用横向屏幕空间。 - 使用
RelativeLayout或LinearLayout等视图组来排列视图。这种方法允许系统根据 TV 屏幕的大小、对齐方式、纵横比和像素密度调整视图的位置。 - 在布局控件之间添加足够的边距,以避免界面杂乱。
过扫描
由于电视标准的发展旨在向观众呈现全屏画面,TV 布局有一些独特的要求。因此,TV 设备可能会剪切应用布局的外部边缘,以确保整个显示屏都被填充。这种行为通常被称为过扫描。
将必须始终对用户可见的屏幕元素放置在过扫描安全区域内。在布局的左右边缘添加 48 dp 的 5% 边距,在顶部和底部边缘添加 27 dp 的边距,有助于确保布局中的屏幕元素位于过扫描安全区域内。
不要调整用户不直接交互的背景屏幕元素,也不要将这些元素剪切到过扫描安全区域。这种方法有助于确保背景屏幕元素在所有屏幕上都正确显示。
以下示例显示了一个根布局,它可以包含背景元素,以及一个具有 5% 边距并可以包含过扫描安全区域内元素的嵌套子布局
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- Screen elements that can render outside the overscan-safe area go here. --> <!-- Nested RelativeLayout with overscan-safe margin. --> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="27dp" android:layout_marginBottom="27dp" android:layout_marginLeft="48dp" android:layout_marginRight="48dp"> <!-- Screen elements that need to be within the overscan-safe area go here. --> </RelativeLayout> </RelativeLayout>
注意:如果您使用 AndroidX Leanback 类(例如 BrowseSupportFragment 或相关微件),请勿将过扫描边距应用于您的布局,因为这些布局已包含过扫描安全边距。
构建可用的文本和控件
遵循以下提示,让您的 TV 应用中的文本和控件更容易从远处看清
- 将文本分解成小块,以便用户快速浏览。
- 在深色背景上使用浅色文本。这种样式在电视上更容易阅读。
- 避免使用轻量级字体或笔画极窄和极宽的字体。使用简单的无衬线字体和抗锯齿来提高可读性。
- 使用 Android 的标准字体大小
<TextView android:id="@+id/atext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_vertical" android:singleLine="true" android:textAppearance="?android:attr/textAppearanceMedium"/>
- 确保所有视图微件足够大,以便坐在屏幕 10 英尺(约 3 米)外的用户能够清晰看到。最佳方法是使用布局相对大小而非绝对大小,以及密度无关像素 (dp) 单位而非绝对像素单位。例如,要设置微件的宽度,请使用
wrap_content而非像素测量值;要设置微件的边距,请使用 dp 值而非 px 值。
有关密度无关像素和构建布局以处理更大屏幕尺寸的更多信息,请参阅屏幕兼容性概览。
管理 TV 布局资源
与其他所有 Android 设备一样,电视具有不同的屏幕尺寸并支持不同的分辨率,包括但不限于 720p、1080p 和 4K。确保您的应用支持不同的屏幕尺寸。
不同的屏幕尺寸和分辨率具有不同的像素密度。为了在不同屏幕尺寸、分辨率和像素密度下保持界面的外观,请使用密度无关像素 (dp) 而非像素来定义界面测量值。不同 TV 面板分辨率的屏幕像素密度如下所述。
| 面板分辨率 | 屏幕像素密度 |
|---|---|
| 720p | tvdpi |
| 1080 | xhdpi |
| 4K | xxxhdpi |
有关优化大屏幕布局和资源的更多信息,请参阅屏幕兼容性概览。
应避免的布局模式
有一些布局构建方法在 TV 设备上效果不佳。以下是开发 TV 布局时应避免的一些用户界面方法。
- 重复使用手机或平板电脑布局:请勿不加修改地重复使用手机或平板电脑应用的布局。为其他 Android 设备外形因素构建的布局不适用于 TV 设备,并且必须针对在 TV 上的操作进行简化。
- 使用
ActionBar:虽然操作栏建议在手机和平板电脑上使用,但它们不适用于 TV 界面。强烈不建议在 TV 应用中使用操作栏选项菜单或任何下拉菜单,因为使用遥控器导航此类菜单非常困难。 - 使用
ViewPager:在手机或平板电脑上屏幕之间滑动效果很好,但在电视上不要尝试这样做!
有关设计适用于 TV 的布局的更多信息,请参阅TV 设计指南。
处理大型位图
TV 设备与其他 Android 设备一样,内存有限。如果您的应用布局使用非常高分辨率的图像,或者在应用运行中使用大量高分辨率图像,它可能很快就会达到内存限制并导致内存不足错误。在大多数情况下,我们建议使用 Glide 库来获取、解码和显示应用中的位图。有关处理位图时获得最佳性能的更多信息,请参阅我们通用的Android 图形最佳实践。
提供有效广告
对于客厅环境,我们建议您使用全屏且可在 30 秒内关闭的视频广告解决方案。Android TV 上的广告功能(例如关闭按钮和点击跳转)必须使用方向键(D-pad)而不是触摸来访问。
Android TV 不提供网络浏览器。您的广告不得尝试启动网络浏览器或重定向到未获 Android TV 设备批准的 Google Play 商店内容。
注意:您可以将 WebView 类用于社交媒体服务的登录。