5

有点菜鸟的问题,但在计算手机落入的密度桶时我感到困惑。我将以我的 Galaxy S3 为例。

它有一个分辨率,1280 x 720这意味着它有306 dpi。现在,参考下面的图表,我的手机属于这一hdpi类,因为它的屏幕多于240 dpi但少于320 dpi所需的xhdpi屏幕。所以,电话是853 x 480 DP(除以 1.5)

但是,我手机上的屏幕信息应用程序告诉我这是一个xhdpi屏幕。所以,电话是640 x 360 DP(除以2)。

我怎么知道我的手机属于哪个正确的密度桶?

在此处输入图像描述

更新:
我正在尝试为我所在国家/地区排名前 10 位的 Android 手机设计我的应用程序。所以我正在计算它们在 DP 中的大小,以根据它们的“最小宽度 DP”来设计 UI。这不是一次性的大小计算。

4

3 回答 3

12

如果你想知道一次,你可以得到一个类似ScreenInfo的应用程序并运行它。如果您想以编程方式了解,可以添加密度文件夹,例如values-mdpiand values-xhdpi,在其中放置一个 xml 文件,例如whoami.xml使用以下内容:

<resources>
    <string name="density_bucket">mdpi</string>
</resources>

并且,分别:

<resources>
    <string name="density_bucket">xhdpi</string>
</resources>

然后从应用程序查询:

String densityBucket = getResources().getString( R.string.density_bucket );
于 2015-01-30T16:12:25.323 回答
11

嘿,我认得那张图表!主要是因为我创建了它:D。为澄清起见,该图表显示了每个密度桶的基线 dpi,但不能用于确定设备应归类为哪个密度桶。也就是说,下图显示了设备如何概括为密度桶,您可以看到它们的 dpi 可能高于或低于它们所在的桶。

密度桶泛化

现在回答你的问题,不幸的是,没有保证完全根据其规格知道设备将落入什么密度桶的方法。这是因为设备制造商能够选择密度桶。大多数时候,他们会选择最接近设备实际 dpi 的存储桶**。幸运的是,谷歌已经收集了一个常见设备列表,以及它们的屏幕尺寸dp和密度桶。这应该让您了解如何正确支持最流行的屏幕尺寸。

**注意:有些设备有自己的特殊密度桶。最值得注意的是,Nexus 7 (2012) 是 213dpi (tvdpi),Nexus 5X 是 420dpi,Nexus 6 和 6P 是 560dpi。这些设备从其他密度版本中获取资产并对其进行扩展。

于 2016-02-05T20:25:43.160 回答
-1

我认为 Android 试图找到“最佳匹配”。所以如果 306 在 240 和 320 之间,它更接近 320。所以它将使用 xhdpi。你可以在这里阅读更多。从官方链接引用到文档:

根据当前屏幕的大小和密度,系统使用应用程序中提供的任何特定于大小和密度的资源。例如,如果设备具有高密度屏幕并且应用程序请求可绘制资源,则系统会查找与设备配置最匹配的可绘制资源目录。根据可用的其他替代资源,具有 hdpi 限定符的资源目录(例如 drawable-hdpi/)可能是最佳匹配,因此系统使用该目录中的可绘制资源。

于 2015-01-30T16:16:10.673 回答