Skip to content

dp sp px

Posted on:April 13, 2020 at 11:36:38 GMT+8

dp

Density-independent Pixels 密度无关像素

一个基于屏幕物理密度的抽象的单位。

TA 与 屏幕物理密度/像素密度 相关,对应不同的 density

类型dpidensity
ldpi1200.75
mdpi1601.0
hdpi2401.5
xhdpi3202.0
xxhdpi4803.0
xxxhdpi6404.0

1dp 显示的像素数为 1×densitypx。

sp

Scale-independent Pixels 缩放无关像素

sp 和 dp 很类似,唯一的区别是 Android 系统可以自定义字体尺寸,如果设为 Default,则 1sp = 1dp,如设为 Large ,则 1sp > 1dp。 对应scaledDensity

多用于 文字大小。

px

Pixels 像素

屏幕上一个实际的像素点。

多用于 分割线等。

dpi

Dots Per Inch 每英寸墨点

计算为 像素数 px / 物理尺寸 inch

More

dip

同 dp。

pt

Points

mm

Millimeters 毫米

in

Inches 英寸

1 inch ≈ 2.54 cm

ppi

Pixels Per Inch 每英寸像素

几乎等同于 dpi。

Resolution

分辨率(Resolution)指的是设备屏幕横向和纵向的像素个数。

示例

Nexus 5X:

resources.displayMetrics.toString()
DisplayMetrics{density=2.625, width=1080, height=1794, scaledDensity=2.625, xdpi=420.0, ydpi=420.0}

将字体调为 Large:

DisplayMetrics{density=2.625, width=1080, height=1794, scaledDensity=3.01875, xdpi=420.0, ydpi=420.0}

屏幕对角线为 5.2 inch

分辨率为 1080 px × 1920 px

像素密度为 420 dpi

转换

fun View.dp2px(dpValue: Float): Float {
    return (dpValue * this.resources.displayMetrics.density + 0.5f)
}

fun View.px2dp(pxValue: Float): Float {
    return (pxValue / this.resources.displayMetrics.density + 0.5f)
}

fun View.sp2px(spValue: Float): Float {
    return (spValue * this.resources.displayMetrics.scaledDensity + 0.5f)
}

参考

android - What is the difference between “px”, “dip”, “dp” and “sp”? - Stack Overflow

更多资源类型 | Android 开发者 | Android Developers

支持不同的像素密度 | Android 开发者 | Android Developers

[Android问答] px、dp和sp,这些单位有什么区别? - 八进制 - 博客园