Android - 关于dp和像素

时间:2015-09-01 08:13:46

标签: android screen pixels density-independent-pixel screen-density

我知道这可能是一个愚蠢的问题,但我真的经历了这么多的物资和链接,但仍然不太明白。在"支持多个屏幕" Android Develop Doc的一节,它介绍了这样的dp:

  

与密度无关的像素(dp)

     

在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置。与密度无关的像素相当于160 dpi屏幕上的一个物理像素,这是系统对于"媒体假设的基线密度。密度屏幕。在运行时,系统根据使用的屏幕的实际密度,根据需要透明地处理dp单元的任何缩放。 dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi的屏幕上,1 dp等于1.5个物理像素。在定义应用程序的UI时,应始终使用dp单位,以确保在不同密度的屏幕上正确显示UI。

基本上我理解这样一个事实:具有更高dpi的屏幕在单个物理英寸中会有更多像素,这意味着这样的屏幕中的dp将等于更多物理像素(px)

但是根据上述转换方程(粗体字),在具有更高dpi(例如240dpi屏幕)的屏幕中, px =(240/160)* dp = 1.5dp 。这似乎意味着在更高的dpi屏幕 px将等于更多dp 。这看起来与我之前的理解相冲突。

所以,拜托,任何人都可以帮我解决这个棘手的问题。非常感谢你,真的。

1 个答案:

答案 0 :(得分:1)

你正在寻找公式中的错误位置。要查看有多少dp等于一个px的不同密度,请重新排列公式:

px = dp * (dpi/160)
dp = px / (dpi/160)

现在是1px,在mdpi设备中:

dp = 1 / (160/160) = 1dp

在hdpi设备中:

dp = 1 / (240/160) = 0.666666667dp

您可以在更高密度的设备中看到1px等于less dp