稍微有点问题,但在计算手机的密度桶时,我感到很困惑。我将把我的Galaxy S3作为一个例子。
它的分辨率为1280 x 720
,表示它有306 dpi
。现在,请参阅下面的图表,我的手机属于hdpi
类别,因为它的240 dpi
超过320 dpi
但需要xhdpi
853 x 480 DP
屏幕。因此,手机为xhdpi
(除以1.5)
但是,我手机上的屏幕信息应用程序告诉我它是640 x 360 DP
屏幕。因此,手机为{{1}}(除以2)。
我如何知道手机的密度桶是什么?
更新
我正在尝试为我所在国家/地区的前10款Android手机设计我的应用。因此,我正在计算他们在DP中的大小,以根据他们的“最小宽度DP”设计UI。这不是一次性的大小计算。
答案 0 :(得分:10)
如果你想知道一次,就可以获得像ScreenInfo这样的应用并运行它。如果您想以编程方式了解,可以添加密度文件夹,例如values-mdpi
和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 );
答案 1 :(得分:9)
嘿,我认出那张图表!主要是因为我created it:D。为了澄清,该图表显示了每个密度桶的基线dpi,但不能用于确定设备应归类为哪个密度桶。也就是说,下图显示了如何将设备推广到密度桶中,您可以看到它们的dpi可能高于或低于它们所属的桶。
现在回答你的问题,不幸的是,没有任何保证的方法可以知道一个设备将完全基于其规格的密度桶。这是因为设备制造商能够选择密度桶。大多数情况下,他们会选择最接近设备实际dpi的桶**。幸运的是,谷歌收集了list of common devices,以及dp
的屏幕尺寸和密度桶。这应该可以让您了解如何正确支持最常见的屏幕尺寸。
**注意:有些设备有自己特殊的密度桶。最值得注意的是,Nexus 7(2012)为213dpi(tvdpi),Nexus 5X为420dpi,Nexus 6和6P为560dpi。这些设备从其他密度版本中获取资产并进行扩展。
答案 2 :(得分:-1)
我认为Android会尝试找到&#34;最佳匹配&#34;。因此,如果306在240和320之间,则它更接近320.所以它将使用xhdpi。您可以阅读更多here。引用官方链接到文档:
根据当前屏幕的大小和密度,系统使用应用程序中提供的任何特定于大小和密度的资源。例如,如果设备具有高密度屏幕并且应用程序请求可绘制资源,则系统会查找与设备配置最匹配的可绘制资源目录。根据可用的其他备用资源,具有hdpi限定符的资源目录(例如drawable-hdpi /)可能是最佳匹配,因此系统使用此目录中的可绘制资源。