测量单位 px、dip、dp 和 sp 的区别是什么?


当前回答

一个虚拟像素单位,你应该在定义UI布局时使用,以以密度独立的方式表达布局尺寸或位置。 如上所述,密度独立的像素相当于160dpi屏幕上的一个物理像素,这是系统对“中间”密度屏幕所承认的基密度。

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal

尝试从创意团队获得所有像素值的数字,否则准确性损失会发生,同时加倍为0.5。

SP

使用 sp 为字体大小. 然后只有在应用程序内部的字体会改变,而设备字体大小会改变(即显示 -> 字体在设备上)。 如果你想在应用程序内部保持静态字体大小,你可以给字体大小在 dp. 在这种情况下,它永远不会改变。

其他回答

dpi -

每英寸点 测量屏幕的像素密度。

px - 像素

编写屏幕像素

点 - 点

约 1/72 英寸,与物理屏幕大小相比。

在 - 英寸 - 至物理屏幕大小(1 英寸 = 2.54 厘米)。

mm - 毫米 - 与物理屏幕大小有关。

sp - 尺寸独立的像素。

基于用户的字体大小偏好,字体应该是“sp”。

迪普 -

dip = dp 密度独立的像素. 它根据屏幕密度而异. 在 160 dpi 屏幕上, 1 dp = 1 像素. 使用 dp 除了文本字体大小。

在标准情况下,dp 和 sp 用于字体大小 sp 和 dp 用于其他任何东西。

单元转换的公式:

px = dp * (dpi / 160 );

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  

dp-to-pixel 比例与屏幕密度相匹配,但不一定是直接比例。

注意:编辑器接受“dip”和“dp”,尽管“dp”与“sp”更一致。

尺寸独立的Pixels - 这类似于dp单元,但它也按用户的字体大小偏好进行尺寸。

由官方文档复制的答案所列的 dp 和 sp 单元之间的差异可以通过更改“设置”>“可用性”>“长文本”选项在运行时看到。

大文本选项使文本变成1.3倍。

private static final float LARGE_FONT_SCALE = 1.3f;

这可能当然是供应商依赖的,因为它在包 / 应用程序 / 设置。

我已经计算了下面的公式,以便将 dpi 转换为 dp 和 sp

PX(像素):

DP / DIP(密度像素 / 密度独立像素):

dip == dp. 在以前的Android版本中,dip 被使用,后来更改为dp. 这是 px 的替代品. 一般情况下,我们从来不使用 px 因为它是绝对值. 如果您使用 px 设置宽度或高度, 如果该应用程序正在下载到不同的屏幕大小设备,那么该视图不会扩展到屏幕的原始大小。

SP(尺寸独立像素):

基于用户的字体大小偏好,字体应该使用 sp. 当提到字体大小适合不同的屏幕大小时,使用 sp. 这类似于 dp.Use sp 特别是字体大小以生长 & 缩小动态基于屏幕大小

Android Documentation 說: