显示和布局
Fire TV设备在1080p或720p的用户界面画布上呈现应用程序的用户界面,屏幕密度视设备而定。要在电视机上正常显示,布局必须考虑屏幕分辨率、密度和与密度无关的像素 (dp)。
本文档介绍了在亚马逊Fire TV设备上构建UI布局的技术信息。电视设计一般指南,请参阅设计和用户体验指南。
屏幕尺寸和分辨率
许多Android设备(如Fire平板电脑)采用固定的物理大小及单一分辨率。亚马逊Fire TV设备并非如此,可连接任何尺寸的720p或1080p屏幕。
要在任何分辨率下保持布局大小相同,请以dp而不是像素为单位指定尺寸。
下表显示了Fire TV设备上每个用户界面画布的大小、屏幕密度和显示分辨率(以dp为单位)。
| 用户界面画布 | 画布大小(像素) | 密度标识符 | 显示屏分辨率 (dp) | 屏幕尺寸标识符 |
|---|---|---|---|---|
| 1080p | 1920 x 1080 | xhdpi (320) |
960 x 540 | large |
| 720p | 1280 x 720 | tvdpi (213) |
~960 x 540 | large |
设备设置用户界面画布,其上面会呈现应用用户界面。用户界面画布可能与所连接电视的输出分辨率不同。由于Android会缩放dp单位来匹配每个画布的密度,因此每个画布上的显示分辨率约为960 x 540 dp。如果以dp为单位构建布局,则在每台Fire TV设备上的呈现效果相同,无需针对每台设备进行更改。
方向
Amazon Fire TV设备的方向永远不会改变,并且对设备的旋转或方向请求将返回以下结果:
| 方法 | 结果 |
|---|---|
Display.getRotation() |
0 (ROTATION_0) |
Display.getOrientation()(已弃用) |
0 (ORIENTATION_UNDEFINED) |
资源配置
若应用设计为在亚马逊Fire TV以外的设备(例如平板电脑)上运行,可为每个设备类型创建不同布局和可绘制内容,将其存储在针对不同设备配置命名的res/子目录中。有关使用这些资源配置的更多信息,请参阅Android屏幕兼容性概述。
下表所述为亚马逊Fire TV设备的资源配置。
| 配置 | 值 |
|---|---|
| 最小宽度 | sw540dp |
| 可用宽度 | w960dp |
| 可用高度 | h540dp |
| 屏幕尺寸 | large |
| 屏幕宽高比 | long |
| 屏幕方向 | land(电视应用始终为横向) |
| UI模式 | television |
| 夜间模式 | notnight |
| 屏幕像素密度 | xhdpi(1080p用户界面画布)或tvdpi(720p用户界面画布) |
| 触摸屏类型 | notouch |
| 键盘可用性 | keyssoft |
| 主要文本输入法 | nokeys |
| 导航键可用性 | navexposed |
| 主要非触摸导航方法 | dpad |
| 平台版本 | v17 |
布局最佳实践
请按以下所述操作,使您的应用在每个用户界面画布上都能正确呈现:
- 以dp而不是px来调整用户界面的大小。 不要在布局或代码中硬编码1920 x 1080或其他像素值。
- 从窗口获取屏幕尺寸。 使用
WindowMetrics(API级别为30和更高)、Resources.getDisplayMetrics()或Configuration(配置)。不要使用Display.Mode,此设置报告电视面板的分辨率,而不是用户界面画布的分辨率。 - 不要用密度阈值限制布局或资产。 例如,诸如
densityDpi >= 320之类的检查在tvdpi画布上会失败。请改为使用资源限定符或以dp表示的大小。 - 按显示大小请求和解码图像。 根据当前密度 (dp ×
DisplayMetrics.density) 计算像素大小,并包括对焦时应用的变焦。不要请求固定1080p像素大小的图像。
以下示例从窗口读取用户界面画布大小,并将图像请求的dp大小转换为像素:
import kotlin.math.roundToInt
//从窗口读取用户界面画布大小,不从Display.Mode读取。
val metrics = resources.displayMetrics
val canvasWidthPx = metrics.widthPixels //xhdpi上为1920,tvdpi上为1280
val canvasHeightPx = metrics.heightPixels //xhdpi上为1080,tvdpi上为720
//将当前密度的dp大小转换为像素。
fun dpToPx(dp: Float): Int = (dp * resources.displayMetrics.density).roundToInt()
//调整一张宽度为200dp的海报的大小,对焦时可缩放至1.1倍。
val posterWidthPx = dpToPx(200f * 1.1f) //xhdpi上为440,tvdpi上约为293
相关主题
Last updated: 2026年10月30日

