Android最小按钮高度:48dp = 9mm?

Dav*_*ôté 17 mobile android

我目前正在研究移动应用程序的线框图,而且有些东西似乎让我感到不安:在Android设计指南中,它们说明了以下内容:

平均而言,48dp转化为约9mm的物理尺寸(具有一些可变性).

但是,根据Android Developpers Dev Guide,他们dp使用以下公式计算:

与密度无关的像素相当于160 dpi屏幕上的一个物理像素,这是系统为"中等"密度屏幕假定的基线密度.在运行时,系统根据所使用屏幕的实际密度,根据需要透明地处理dp单元的任何缩放.dp单位到屏幕像素的转换很简单:px = dp*(dpi/160).例如,在240 dpi屏幕上,1 dp等于1.5个物理像素.在定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI.

所以,为了简单起见,我在160dpi进行设计,因此我的图形尺寸符合推荐标准.打印时,我将文档缩小2,22(160dpi/72dpi),因此打印结果在纸上给出了实际的物理尺寸.

我希望我的按钮高48dp.但是,如果我按照我读到的所有内容进行数学运算,那么通过将48指定为我的按钮高度,我就无法接近9mm的大小.

48dp/160dpi = 0.3英寸,所以7.62毫米......

我明显错过了什么/做错了什么?9mm来自哪里?

谢谢!

更新

这是帮助我理解我在接受的答案中遗漏了什么的原因.

以屏幕密度200为例.Android将使用240来计算.所以:

  • 240dpi/160dpi = 1.5的比例
  • 48dp*1,5的比例= 78个物理像素
  • 78 px/240dpi = 0.3英寸(与48dp/160dpi完全相同)

现在的诀窍是实际设备密度为200.因此像素将显得比240dpi屏幕更大.要获得200dpi设备的物理尺寸,我们必须获得两种分辨率之间的差异并将其应用到0.3英寸:

  • 240dpi/200dpi = 1,2
  • 0,3 in*1,2差异= 0,36,其中9,144mm

我知道这与@kabuko所说的完全相同:

(48dp/200ppi)*1.5*25.4 mm/in = 9.14400

但一步一步的方式帮助我弄清楚幕后发生了什么.

kab*_*uko 12

您引用的确切陈述是:

平均而言,48dp转换为约9mm的物理尺寸

如果您从支持多屏幕文档中查看此图像:

Android密度

你会看到有密度桶(ldpi,mdpi,hdpi,xhdpi).这些中的每一个都不是固定的密度,而是一系列密度,最终映射到用于各种密度计算的固定数字(分别为120,160,240,320).160很少是mdpi设备的每英寸实际像素数,它只是为简单起见而使用的抽象值.

你的计算是正确的,但你假设160ppi是平均密度(假设是mdpi设备),因为160dpi是mdpi的抽象值.显然不是,如果您引用的陈述确实如此.我怀疑有很多设备的平均值大约为200ppi,最终被归类为hdpi.那将是:(48dp/200ppi)*1.5*25.4 mm/in = 9.14400 mm.只是一个猜测,但我认为其根本原因是平均值不是160ppi.

更新:

这是来自设计网站的文档的另一个引用:

如果您将元素设计为至少48dp高和宽,则可以保证您的目标永远不会小于建议的最小目标尺寸7mm,无论它们显示在哪个屏幕上.

因此尺寸从> 7mm到至少9mm(假设9mm应该是平均值,我认为顶部应该<11mm).是的,48dp应该在所有屏幕上"大约"相同的大小,但是"大约"真正意味着什么并没有真正指定.你的7.62mm在范围内.它们的9mm值仅适用于"平均值",这是一个未指定的ppi.

  • 啊,好的 这就是误解.问题是,抽象密度(ldpi/mdpi/hdpi/xdpi:120dpi/160dpi/240dpi/320dpi)是Android用来进行这些计算的,然后是实际的物理密度(每英寸像素数).如果您使用200ppi设备,它可能会被分成hdpi,即240dpi.所以即使设备真的是200ppi,Android也会使用240dpi进行所有计算. (2认同)