我正在阅读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?我知道这是理想的,但为什么?
答案 0 :(得分:43)
你应该(几乎)总是使用灵活的大小单位,例如dp
,这是与密度无关的像素,因为一个设备上的300px
不一定与{{300px
相同。 1}}在另一个。最大的实际意义是,您的布局在密度与设计目标不同的设备上看起来会有很大不同。
dp
或dip
表示与密度无关的像素dpi
或ppi
表示每英寸点数(或像素数)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的示例,请参见此处:
答案 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 dpi
(http://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时,它会将您的布局缩放到具有不同像素密度的其他类似大小的屏幕。
有时你实际上想要像素,当你处理代码中的尺寸时,你总是处理真实的像素,除非你转换它们。