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


当前回答

px - 一个像素,相同于什么在CSS,JavaScript,等使用 sp - 规模独立的像素 dip - 密度独立的像素

通常 sp 用于字体大小,而 dip 用于其他人(也称为 dp)。

其他回答

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

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

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

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

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

private static final float LARGE_FONT_SCALE = 1.3f;

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

下面是Android使用的公式:

px = dp * (dpi / 160)

在哪里 dpi 是下列屏幕密度之一. 所有可能的密度列表请参阅这里

它定义了“DENSITY_*”的恒例。

ldpi (低) ~120dpi mdpi (中) ~160dpi hdpi (高) ~240dpi xhdpi (超高) ~320dpi xxhdpi (超高) ~480dpi xxxhdpi (超高) ~640dpi

从这里拿出来。

这将解决很多混乱,当翻译在px和dp之间,如果你知道你的屏幕dpi。

所以,让我们说你想要一个图像60dp的HDPI屏幕,然后物理像素大小60dp是:

px = 60 * (240 / 160)

我想提供一个简单的方式来理解 dp. 事实上,我认为 dp 是最容易理解的. dp 只是一个物理长度单位. 它与 mm 或 inch 相同的尺寸. 它只是方便我们写 50dp, 60dp 而不是 50/160 英寸或 60/160 英寸,因为一个 dp 只是 1/160 英寸,无论屏幕大小或分辨率是什么。

唯一的问题是,某些屏幕的Android dpi不准确,例如,分为160dpi的屏幕可能有170dpi。

一个虚拟像素单位,你应该在定义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. 在这种情况下,它永远不会改变。