Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:mm或in尺寸的视图大小不正确_Android_Android Layout - Fatal编程技术网

Android:mm或in尺寸的视图大小不正确

Android:mm或in尺寸的视图大小不正确,android,android-layout,Android,Android Layout,我有一个按钮,其布局高度为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: 9

我有一个按钮,其布局高度为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尺寸?

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

建议使用dp/sp测量视图对象/字体大小

阅读本文:


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

dp单元的一个优点是,它不会受到您注意到的硬件缺陷的影响,因为它不是基于xdpi/ydpi,而是似乎在所有设备上都或多或少正确地实现了

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

除了为这些设备创建单独的布局文件外,还有其他方法可以绕过硬件缺陷吗

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

还是完全不建议使用mm/in尺寸

如果您的某些东西确实需要特定的毫米或英寸数,则可以使用mm/in。在这种情况下,使用dp不会在所有设备上都起作用,因为每英寸dp的数量在设备之间有所不同。有关这方面的详细信息,请参阅:

当使用mm/in时,必须小心那些报告xdpi/ydpi错误值的“损坏”设备

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


有关可用单位以及毫米和英寸问题的更多详细信息,请参阅:

在某些情况下,我不希望资产进行缩放。。。例如,某个按钮应始终具有某个最小尺寸(大约拇指大小,6-10mm高)。即使在240x320和160dpi的x10等设备上,按钮的高度仍应为6-10mm。我知道这是我正在开发的应用程序的一种特殊要求。但存在毫米/英寸测量值是有原因的。文件没有说明不建议使用该测量。不建议仅使用px大小。如果忽略有缺陷的设备,则以mm/in指定的内容将在具有不同dpi的设备之间正确缩放。它实际上比dp单元的扩展性更好(参见我的答案和其他相关问题)。然而,我同意dp是在这种特殊情况下使用的单位。