Android手机机型众多,分辨率和屏幕大小都很多,导致了Android生态环境的碎片化现象越来越严重。Google公司为了解决分辨率过多的问题,在Android的开发文档中定义了px、dp、sp,方便开发者适配不同分辨率的Android设备。
屏幕参数:
屏幕大小:指屏幕对角线的长度,通常使用“寸”来度量,例如5.0寸手机、6.0寸手机等。
分辨率:分辨率是指手机屏幕的像素点个数,例如720*1280就是指屏幕的分辨率,指宽有720个像素点,而高有1280个像素点。
PPI:每英寸像素(Pixels PerInch)又被称为DPI(Dots Per Inch)。它是由对角线的像素点数除以屏幕的大小得到的,通常达到400PPI就是非常高的屏幕密度了。
系统屏幕密度:
每个厂商的Android手机具有不同的大小尺寸和像素密度的屏幕。Android系统如果要精确到每种DPI的屏幕,那是不可能的。因此系统定义了几个标准的DPI值,作为手机固定的DPI,如下图所示。
密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi | xxxhdpi |
密度值 | 120 | 160 | 240 | 320 | 480 | 640 |
分辨率 | 240*320 | 320*480 | 480*800 | 720*1280 | 1080*1920 | 3840*2160 |
px : 其实就是像素单位,比如我们通常说的手机分辨列表800*400都是px的单位
dp : 虚拟像素,在不同的像素密度的设备上会自动适配
dip: 同dp
dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:
在320x480分辨率,像素密度为160,1dp=1px
在480x800分辨率,像素密度为240,1dp=1.5px
计算公式:1dp*像素密度/160 = 实际像素数
ppi的运算方式是:
PPI = √(长度像素数² + 宽度像素数²) / 屏幕对角线英寸数
dp:Density-independent pixels,以160PPI屏幕为标准,则1dp=1px,
dp和px的换算公式 :
dp*ppi/160 = px。比如1dp x 320ppi/160 = 2px。
sp:Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1sp=1px。
sp 与 px 的换算公式:sp*ppi/160 = px
总结得出:
px = dp*ppi/160
dp = px / (ppi / 160)
px = sp*ppi/160
sp = px / (ppi / 160)