Android:使用毫米或英寸尺寸的视图大小不正确。

3

我有一个按钮,其layout_height为10毫米,在大多数设备上看起来正确,但在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提供了明显错误的值,我认为这就是导致尺寸不正确的原因。

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

或者,是否建议根本不使用毫米/英寸尺寸?

2个回答

1
基于Kristiono Setyadi的回答中提供的额外信息,我建议您应该将按钮大小设置为48 dp。dp单位考虑了设备的dpi,因此使用dp指定的内容在不同分辨率和dpi的设备上看起来具有类似的物理大小。
dp单位的一个好处是它不受硬件错误的影响,因为它不基于xdpi / ydpi,而是densityDpi,这在所有设备上似乎都实现得比较正确。
如果其他遇到类似问题的人发现了这个问题,即使使用dp应该足够好,我也会尝试回答您的其他问题。

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

您不应该为这些设备创建单独的布局文件,因为还有更多的设备存在相同的问题。我发现Galaxy Mini和Galaxy S3 Mini是另外两款表现相同的手机。
如果您有需要使用特定的毫米或英寸数量,可以使用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的设备使用mm或英寸,对于其他设备则使用dp,因为具有密度差异和xdpi之间巨大差异的设备可能会报告不正确的xdpi值。

有关可用单位和毫米与英寸的问题的更多详细信息,请参见:为什么在使用(英寸)或毫米(毫米)作为尺寸单位时,Lint显示警告?


0

在声明 UI 的尺寸值时,不应使用毫米/英寸大小。这是不推荐的。为什么?因为它在不同设备上无法正确缩放。

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

阅读本文:

更多资源类型 - 尺寸


2
在某些情况下,我不希望资产进行缩放...例如,某个按钮应始终具有某个最小大小(大约为拇指大小,高度为6-10毫米)。即使在像X10这样的设备上,其分辨率为240x320和160dpi,该按钮仍应具有6-10毫米的高度。我知道这是我正在开发的应用程序的一种特殊要求。但是,使用毫米/英寸测量单位是有原因的。文档没有说明不建议使用该测量单位。只有px大小不被推荐使用。 - P.Melch
如果您忽略有缺陷的设备,以毫米/英寸为单位指定的内容将在具有不同dpi的设备上正确缩放。实际上,它甚至比dp单位更好地进行缩放(请参见我的答案和链接到其他问题)。但是,在这种特定情况下,我同意使用dp单位。 - nibarius

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