据我理解,这将确保元素在不同屏幕上对用户保持相同的感知大小。使用 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英寸/毫米的内容,则应使用英寸/毫米单位。但这样做会导致图形被缩放到所需大小,因此可能会变得有些缓慢,并且由于缩放而不太好看。
dp
和mm
的具体问题:http://stackoverflow.com/questions/9907842/why-dp-to-pixel-ratio-changes-with-the-screen-density-but-not-necessarily-in - Sébastien