为了为 1080p 和 720p android TV 定义不同的尺寸值,我需要决定应该使用哪个限定符。当我尝试使用 values-sw1080p、values-sw720p 之类的东西时,它不起作用。dimes.xml 中的值不会影响任何内容。但如果我使用 -sw540dp、-sw360dp 之类的限定符,它会起作用。我真的不明白为什么会这样。任何的想法?谢谢。
3 回答
Android TV 可以考虑三种屏幕密度,以及三种相应的限定符。这些包括:
- tvdpi - (213dpi) - 用于 720p 电视;
- xhdpi - (320dpi) - 用于 1080p (HD) 电视;
- xxxhdpi - (640dpi) - 用于 4k(超高清)电视。
但根据https://developer.android.com/training/tv/start/layouts.html#density-resources:
您的电视布局应以 1920 x 1080 像素 [标准 1080p/HD] 的屏幕尺寸为目标,然后在必要时允许 Android 系统将您的布局元素缩小到 720p。
这意味着,如果您遵循此建议并始终按照 1080p 规格进行设计,则可以使用-television
UI 模式限定符并完成它。
但是,如果您需要为不同的电视尺寸提供不同的图像和布局,您可以使用上面的屏幕密度限定符。
电视的“标准”图像和布局可以存储在一个-xhdpi
文件夹中,xhdpi
用于 1080p 电视的限定符也是如此。
如果 4k 电视需要(可选)高分辨率版本的图像,它们可以作为“2x”图像提供,并存储在drawable-xxxhdpi
文件夹中。同样,仅针对 4k 电视的尺寸/布局可以放置在-xxxhdpi
.
(特别注意,-tvdpi
限定符特定于 720p,并且几乎可以肯定不是您想要用来支持现代电视的。)
文档稀疏且略有矛盾,但我主要基于以下来源:
https://developer.android.com/guide/practices/screens_support.html https://stackoverflow.com/a/11581786/925478
首先,你基本上是正确的。您可以使用
sw360dp/ : 720p screens
sw540dp/ : 1080p screens
不起作用的原因sw720p/sw1080p
是因为它们不作为限定词存在。
这是有关使用不同屏幕尺寸的官方文档。如您所见,如果要计算dp
文件夹,需要考虑两个不同的单位:像素数(例如 720)和像素密度(即每英寸点数单位,或多少像素适合一英寸)。
公式很简单:
px = dp * (dpi / 160)
而在这种情况下,我们有:
dp = px * 160 / dpi
当然,电视可以有不同的密度:这张表告诉你更多关于它的信息(来源:官方文档)。
假设我们有一个具有超高密度 (@320 dpi) 的 1080p 显示器。我们做数学
dp = 1080 * 160 / 320 = 540
因此,我们获得了适当的文件夹来放置您的资源。
编辑:在同一页面上,声明有一个特定的tvdpi
限定符可用于与电视相关的资源(大约213 dpi
)。
试试这个
first you need to decide two things:
1. your screen density (dpi)
2. your screen dimension (px)
then apply this to get size in dp:
dp = px / dpi
example for 1080px/2.0dpi
dp = 540
then folder name would be: values-sw540dp
where
sw(smallest width) = Math.min(width, height);
//so orientation doesn't matter