深入理解dip、 dpi、px 、sp
android编程过程中,涉及到支持多种屏幕,也就是通常说的屏幕适配问题。
先来看一下这几个概念对应的英文全称:
dip:density-dependent pixel 密度无关像素
dpi:dot per inch 每英寸(像素)点数
px:pixel 像素
sp:scale pixel 放大像素
另一个概念,per inch=2.45cm
google developer上建议:用布局文件的单位用dip,简写dp;文字用sp;
再来看看:dp和px的关系,dp是怎样做到与像素无关的?
px = dp * (dpi / 160)
从上述关系式不难看出,dp确实是与密度无关的,密度概念被dpi所包含。
举一个具体的例子:
MX3(魅族3):
屏幕分辨率 1800X1080
整机尺寸:139.0*71mm
屏幕尺寸:115mm*69.2mm
长4.53inch,宽*2.72inch,屏幕尺寸5.1inch
由dpi概念可知:MX3约为397dpi,属于XHDPI。
The density buckets:
LDPI(120dpi), MDPI(160dpi), HDPI(240dpi), XHDPI(320), XXHDPI(480dpi), and XXXHDPI(640dpi).
综上可知,dp与屏幕密度无关,布局文件中以dp为单位,在不同分辨率的手机屏幕上,被转换成相应的px,相应的放大或缩小,达到对不同屏幕分辨率的适配效果。