我目前正在为移动应用程序制作线框,但我似乎忘记了一些事情:在Android Design Guidelines中,他们陈述了以下内容:
平均而言,48dp 转换为大约 9mm 的物理尺寸(有一些可变性)。
但是,根据Android Developers Dev Guide,他们dp
使用以下公式计算 a:
与密度无关的像素相当于 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 英寸 * 1,2 的差异 = 0,36 英寸,即 9,144 毫米
我知道这与@kabuko 所说的完全相同:
(48dp / 200ppi) * 1.5 * 25.4 毫米/英寸 = 9.14400
但一步一步的帮助我弄清楚引擎盖下发生了什么。