dp
Density-independent Pixels 密度无关像素
一个基于屏幕物理密度的抽象的单位。
TA 与 屏幕物理密度/像素密度 相关,对应不同的 density
。
类型 | dpi | density |
---|---|---|
ldpi | 120 | 0.75 |
mdpi | 160 | 1.0 |
hdpi | 240 | 1.5 |
xhdpi | 320 | 2.0 |
xxhdpi | 480 | 3.0 |
xxxhdpi | 640 | 4.0 |
1dp 显示的像素数为 1×density
px。
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