【发布时间】:2010-12-23 09:14:01
【问题描述】:
如果在布局 xml 文件中,我将大小设置为,例如 12dip。在 mdpi 中总是 12px,在 hdpi 中总是 18px?
那么对于 mdpi 而言,dip 总是正确的,并且会针对其他密度相应地缩放?
【问题讨论】:
标签: android layout resolution
如果在布局 xml 文件中,我将大小设置为,例如 12dip。在 mdpi 中总是 12px,在 hdpi 中总是 18px?
那么对于 mdpi 而言,dip 总是正确的,并且会针对其他密度相应地缩放?
【问题讨论】:
标签: android layout resolution
official documentation 完全涵盖了该问题。 dip、px 和 dpi 之间的关系在this 部分进行了介绍。
引用:
与密度无关的像素 (dp)
应用程序可以用来定义它们的虚拟像素单元 UI,表达布局尺寸或 以与密度无关的方式定位。
与密度无关的像素相当于一个物理像素 160 dpi 屏幕,基线密度 由平台假设(如所述 稍后在本文档中)。在运行时, 该平台透明地处理任何 缩放所需的 dp 单位,基于 关于屏幕的实际密度 采用。 dp 单位转换为 屏幕像素很简单:像素 = dps *(密度/160)。例如,在 240 dpi 屏幕上,1 dp 等于 1.5 物理像素。使用 dp 单位 高度定义应用程序的 UI 推荐,作为确保 在不同的地方正确显示您的 UI 屏幕。
所以声明:
在 mdpi 中总是 12px,在 hdpi 中总是 18px
根据文档,似乎是正确的。
【讨论】:
12dp 在密度为 160 dpi 的设备上为 12px。文档并没有说所有 mdpi 设备都具有 160 dpi,因此您似乎可能会发现 mdpi 设备具有其他密度(例如 150 或 180 dpi)。在这些情况下,关系 1dp = 1px 将不成立。
你只能确定这种关系:
px = dp * (dpi / 160)
如果设备的密度为 320 dpi,那么每个 dp 对应于 2 px,因为 320/160 是 2。我会说 2 是“密度因子”,但它也是 getResources().getDisplayMetrics().density 得到的,所以也叫“密度”。
【讨论】: