Android:尺寸为mm或英寸的视图尺寸不正确

时间:2011-06-03 08:48:02

标签: android android-layout

我有一个layout_height为10mm的按钮在大多数设备上看起来都是正确的,但是例如Lg Optimus 2X和Motorola Defy上的按钮大小只有一半:

我在这些设备上检索了DisplayMetrics信息,这里有一个简短的概述:

HTC Desire Z:       480x800, density : HIGH, xdpi: 254.0, ydpi: 254.0 
Motorola Defy:     480x854, density : HIGH, xdpi: 96.0, ydpi: 96.0
Samsung Galaxy S2: 480x800, density : HIGH, xdpi: 217.71428, ydpi: 218.49463 
LG Optimus 2X:     480x800, density : HIGH, xdpi: 160.0, ydpi: 160.0

正如您所看到的,Desire Z和三星具有合理的x / y-dpi值。 defy和optimus提供了错误的错误值,我认为这是错误大小的原因。

除了为这些设备创建单独的布局文件之外,还有其他方法可以解决该硬件错误吗?

或者建议不要使用mm / in尺寸?

2 个答案:

答案 0 :(得分:0)

您不应使用mm / in大小来声明UI的维度值。 不推荐。为什么?因为它无法跨设备正确扩展。

建议的方法是使用dp / sp测量视图对象/字体大小。

阅读这篇文章:

More Resource Types - Dimension

答案 1 :(得分:0)

根据您在Kristiono Setyadi的回答中提供的其他信息,我说您应该将按钮的大小设置为48 dp 。 dp单元考虑了设备的dpi,因此使用dp指定的内容在不同分辨率和dpi的设备上看起来具有相似的物理尺寸。

dp单元的一个好处是不会受到你注意到的硬件错误的影响,因为它不是基于xdpi / ydpi而是基于densityDpi,它似乎在所有设备上或多或少地正确实现。

如果其他有类似问题的人发现这个问题,我会尝试回答你的其他问题,即使使用dp应该对你足够好。

  

除了为这些设备创建单独的布局文件之外,还有其他方法可以解决该硬件错误吗?

您不应该为这些设备创建单独的布局文件,因为有更多的设备以相同的方式被破坏。 Galaxy Mini和Galaxy S3 Mini是另外两款我发现的手机行为方式相同。

  

或者建议不要使用mm / in尺寸?

如果您确实需要特定数量的mm或英寸,则可以使用mm / in。在这种情况下,使用dp将无法在所有设备上运行,因为设备之间的每英寸数量dp不同。有关详细信息,请参阅:Android: which UI element size unit to use (if dp not working)

使用mm / in时,必须注意报告xdpi / ydpi错误值的“损坏”设备。

解决这个问题的一种方法是对DisplayMetrics.xdpi / DisplayMetrics.densityDpi大于0.8但小于1.2的设备使用毫米或英寸,并为其他设备使用dp,因为在设备密度差和xdpi之间有很大差异的设备可能报告xdpi的值不正确。

有关可用单位以及mm和inch问题的详细信息,请参阅:Why Lint shows warning when using in (inch) or mm (millimeter) units as dimension?