as

Settings
Sign out
Notifications
Alexa
亚马逊应用商店
Ring
AWS
文档
Support
Contact Us
My Cases
开发
测试
应用发布
盈利
用户参与
设备规格
资源

显示和布局

显示和布局

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日