2011-06-03 153 views
3

我有一个按钮,其layout_height为10mm,在大多数设备上看起来都正确,但例如Lg Optimus 2X和Motorola Defy上的按钮大约有一半大小:Android:尺寸为毫米或英寸的视图尺寸不正确

我检索到这些设备上的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值。违抗和优化提供了不正确的值,我认为这是错误大小的原因。

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

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

回答

0

您不应该使用mm/in来声明UI的尺寸值。 不建议使用。为什么?因为它不会跨设备正确缩放。

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

阅读这篇文章:

More Resource Types - Dimension

+2

在某些情况下,我不想资产规模...比如某个按钮应该始终有一定的最小尺寸(大约拇指的大小,6-10毫米高)。即使在像x10 240x320和160dpi这样的设备上,按钮仍然应该有6-10mm的高度。我知道这是我正在开发的应用程序的一种特殊要求。但有一个原因为什么有一个毫米/英寸的测量。该文件没有说明不推荐使用该测量。只有px尺寸不推荐。 – 2011-06-06 09:39:33

+0

如果您忽略多功能设备,以毫米/英寸为单位指定的内容将在具有不同dpi的设备上正确缩放。它实际上比dp单位的缩放效果更好(请参阅我的回答以及与之相关的其他问题)。不过,我同意dp是在这个特定情况下使用的单位。 – nibarius 2014-03-28 14:38:26

0

基于MATLAB你Kristiono Setyadi的回答提供的额外信息,我说你应该设置按钮的大小48 dp。 dp单元考虑到设备的dpi,因此使用dp指定的内容在不同分辨率和dpi的设备上看起来会具有相似的物理尺寸。

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

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

除了为这些设备创建单独的布局文件之外,是否有其他方式来解决硬件错误?

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

或者是否建议不使用mm/in的大小?

如果您确实需要特定数量的毫米或英寸,则可以使用mm/in。在这种情况下,使用dp不适用于所有设备,因为每台设备的dp-per-inch数量不同。有关详细信息,请参阅:Android: which UI element size unit to use (if dp not working)

使用mm /时,必须注意报告xdpi/ydpi的值不正确的“损坏”设备。

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

有关单位提供更多的细节和用毫米和英寸的问题,请参见:Why Lint shows warning when using in (inch) or mm (millimeter) units as dimension?