【问题标题】:Relations between dip, px and dpidip、px和dpi之间的关系
【发布时间】:2010-12-23 09:14:01
【问题描述】:

如果在布局 xml 文件中,我将大小设置为,例如 12dip。在 mdpi 中总是 12px,在 hdpi 中总是 18px?

那么对于 mdpi 而言,dip 总是正确的,并且会针对其他密度相应地缩放?

【问题讨论】:

    标签: android layout resolution


    【解决方案1】:

    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

    根据文档,似乎是正确的。

    【讨论】:

    • 据我了解,如果屏幕为 160dip,则 12px 在 mdpi 中仅为 12px。 mdpi 是范围广泛的中等分辨率设备。
    【解决方案2】:

    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 得到的,所以也叫“密度”。

    【讨论】:

      猜你喜欢
      • 2012-01-18
      • 2011-01-02
      • 1970-01-01
      • 2012-09-08
      • 2017-02-16
      • 2011-03-20
      • 2014-08-21
      • 2011-09-06
      • 2016-06-10
      相关资源
      最近更新 更多