安卓:如果dp不起作用,应该使用哪种UI元素大小单位?

3
我正在开发一款应用程序,该应用程序仅适用于三星Galaxy SII和三星Galaxy Tab 7.7。所有UI元素的大小都已经按照Android开发者指南中推荐的dp进行了指定。据我所知,这可以确保在不同屏幕上,元素保持相同的视觉大小,让用户有相同的感受。
然而,我的问题是,在7.7英寸的设备上,所有的UI元素看起来要小得多(大约是SII上的2/3)。
我希望在平板电脑上它们能够保持相同的尺寸,甚至更大一些。我已经测试了不同的尺寸格式,当我使用英寸或毫米进行指定时,它们的大小相同,当使用像素时,它们在平板电脑上更大。
但是,使用这三种单位是否真的是正确的方法?如果是,那么为什么Android建议使用dp?
我希望有人能够解决这个问题 :)

你的SII是一个高密度设备,而你的7.1平板是一个大型中密度设备。因此,在你的SII上它会很小,在你的7英寸平板上它会很大。 - Padma Kumar
你所描述的行为对我来说非常令人惊讶。我在这里提出了一个关于dpmm的具体问题:http://stackoverflow.com/questions/9907842/why-dp-to-pixel-ratio-changes-with-the-screen-density-but-not-necessarily-in - Sébastien
有人能想到一个原因,导致在平板电脑上 UI 元素的尺寸发生变化(即使使用了“dp”)吗?这可能是因为手机或平板电脑返回了错误的“dpi”值吗? - Sébastien
2个回答

2
据我理解,这将确保元素在不同屏幕上对用户保持相同的感知大小。使用 dp 可以确保在不同屏幕上有类似的感知大小,但正如您所注意到的那样,并不能保证完全相同的感知大小。dp 单位基于设备的 densityDpi,由设备设置为具有类似 dpi 的密度桶,与设备的真实 物理 dpi 相似。当两个值不同时,任何依赖 dp 的内容都会获得略微不同于预期的大小。通常,这不会在设备之间产生太大的差异,但是您发现了一个非常糟糕的组合,每个设备在相反的方向上都有相当大的差异,使得这种差异非常明显。我的问题在于,在 7.7 英寸设备上,所有 UI 元素都显得更小(大约是 SII 上的 2/3)。
三星Galaxy S2的物理dpi为218,报告密度为240dpi,这意味着所有dp测量值都比物理dpi与密度dpi完全匹配的设备大10%。
三星Galaxy Tab 7.7的物理dpi为197,报告密度为160dpi,因此在这里,所有dp测量值都是在物理dpi与密度dpi完全匹配的设备上的81%。
正如您所看到的,这两个设备与它们的理想dpi值有所不同,并且方向不同。因此,如果您将这两个设备相互比较,则使用dp绘制的所有内容在Galaxy S2上看起来比Galaxy Tab 7.7大约35%。
“我希望它们在平板电脑上大小相等,甚至更大。我已经测试了不同的尺寸测量单位格式,当我以英寸或毫米指定它们时,它们的大小相同,而当以px指定时,在平板电脑上它们会更大。”
您应该避免使用像素,因为这不考虑设备的dpi,因此如您所注意到的,由于Galaxy Tab 7.7的dpi较低,因此所有内容都会更大。
“mm”和“inch”单位取决于屏幕的物理dpi,因此它们在不同设备上看起来相同,所以这可能是您想要使用的单位。
有些设备无法可靠地使用这些单位,但由于您正在开发一个仅在已知设备上使用且没有此问题的应用程序,因此您可以安全地使用它们。有关更多详细信息,请参见我的答案为什么使用(inch)或mm(毫米)作为尺寸时,Lint会显示警告? “但是真的正确的方法是使用这三种单位吗?如果是,那么为什么Android推荐使用dp?”
使用“mm”/“inch”和“dp”都是正确的,但它们的工作方式略有不同,因此在选择应该使用哪个单位时必须考虑重要性。
如果某物应该是大约x英寸/毫米,但如果有一点偏差并不重要,那么最好使用dp单位。由于dp单位与设备所属的密度桶相关联,因此可以知道每个密度桶中x dp映射到多少像素。这意味着可以为每个密度桶创建定制图形,然后应用程序可以使用这些图形而无需对图形进行任何缩放。
正如我之前提到的,如果您需要在屏幕上显示x英寸/毫米的内容,则应使用英寸/毫米单位。但这样做会导致图形被缩放到所需大小,因此可能会变得有些缓慢,并且由于缩放而不太好看。

1

Dp 通常可用于大多数情况,但如果我是你,我会指定不同的布局文件夹。例如,在这种情况下,为您的 7.7 英寸设备指定 layout-xlarge/,并为 Galaxy SII 指定 layout-normal/。

然后,复制您的布局 XML 文件并将其放入这些文件夹中,并根据将使用它的设备指定位置/大小。

enter image description here

这里的信息来自:http://developer.android.com/guide/practices/screens_support.html#support


您确定在7.7上使用layout-xlarge吗? - Padma Kumar
这是来自安卓文档的内容,我认为他们没有理由撒谎。 - Lucas Arrefelt
好的,非常感谢。我想我会尝试为不同的设备使用不同维度的资源,然后在这些文件中指定所有的大小。 - Anders Nysom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接