dp,dip,dpi,ppi,像素和英寸如何相关?

时间:2011-12-12 18:15:29

标签: mobile user-interface pixels dpi density-independent-pixel

我正在阅读dp, dip, px, sp measurements,但我仍然有一些关于dp / dpi vs ppi vs px vs inch的问题。我无法比较它们......是最大的一英寸?

他们说160 dpi意味着每英寸160像素。这是否意味着1英寸包含160像素?

他们还说160 dpi屏幕上的1个像素= 1 dp。这是否意味着1像素和1 dp相等?

最后,我们为什么要使用dp代替px?我知道这是理想的,但为什么

5 个答案:

答案 0 :(得分:43)

你应该(几乎)总是使用灵活的大小单位,例如dp,这是与密度无关的像素,因为一个设备上的300px不一定与{{300px相同。 1}}在另一个。最大的实际意义是,您的布局在密度与设计目标不同的设备上看起来会有很大不同。

  • dpdip表示与密度无关的像素
  • dpippi表示每英寸点数(或像素数)
  • inch是与实际屏幕尺寸相关的物理测量值
  • px表示像素 - 像素根据密度填充任意数量的屏幕区域。

例如,在160dpi屏幕上1dp == 1px == 1/160in,但在240dpi屏幕上1dp == 1.5px。所以不,1dp != 1px。当1dp == 1px时,只有一个案例,并且它位于160dpi屏幕上。像英寸这样的物理测量单位应该从不成为您设计的一部分 - 也就是说,除非您正在制作标尺。

确定1dp的像素数的简单公式为px = dp * (dpi / 160)

答案 1 :(得分:5)

dp是像英寸一样的物理测量。 (是的,是的。请继续阅读。)

" dp对应于160 dpi的像素的物理尺寸" (https://developer.android.com/training/multiscreen/screendensities.html#TaskUseD

160 dpi像素的物理尺寸正好是1/160英寸。因此,dp的大小是1/160英寸。 160 dp = 1英寸。

Px在屏幕上有点任意的测量单位。

有关dp在不同设备上转换为px的示例,请参见此处:

https://stackoverflow.com/a/39495538/984003

答案 2 :(得分:4)

  

dp,dip,dpi,ppi,像素和英寸如何相关?

为了Android开发的目的:

dp = dip
dpi = ppi
inch x dpi = pixels
dp = 160 x inch
dp = 160*pixels/dpi

所以,在160dpi手机上(mdpi):

2 inches = 320 dp
2 inches = 320 pixels

在180 dpi手机上:

2 inches = 320 dp
2 inches = 360 pixels

请注意,2英寸始终 320dp,与屏幕尺寸无关。 dp是1/160英寸的物理距离。

dp to pixels公式很有意思:

dp = 160*pixels/dpi

相当于:

dp = pixels/(dpi/160)

dpi/160是一个有趣的因素。它的相对密度与android的mdpi bin相比,你需要为各种资源箱扩展图形的数量。您会在this页面上看到该因素提及几次,0.75是ldpi的因素。

答案 3 :(得分:1)

我将使用一个例子来解释。

float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

密度等于

.75 on ldpi (120 dpi)
1.0 on mdpi (160 dpi; baseline)
1.5 on hdpi (240 dpi)
2.0 on xhdpi (320 dpi)
3.0 on xxhdpi (480 dpi)
4.0 on xxxhdpi (640 dpi)

所以,例如,

我有一个带有432 dpihttp://dpi.lv/#1920×1080@5.1″)的三星S5。

所以,density = 432/160 = phone's dpi/baseline = 2.7

我的顶栏是48dp。这引用了baseline (160dpi)

所以,在我的S5中,它将是48dp * 2.7

然后,如果我想看到实际的高度:

它将是(48dp * 2.7) / 432 dpi = 0.3 inches

答案 4 :(得分:0)

当您仅考虑屏幕的物理尺寸时,DP是分辨率。当您使用DP时,它会将您的布局缩放到具有不同像素密度的其他类似大小的屏幕。

有时你实际上想要像素,当你处理代码中的尺寸时,你总是处理真实的像素,除非你转换它们。