在Android中我们常见的尺寸单位有dp、sp、px。
- px
通常我们会以手机对角线的长度来定义吋。比如:5.5吋,5.7吋。
而分辨率则是手机的像素点数。如:1920*1080,就是高1920个像素,宽1080像素。像素点数就决定我们屏幕的细腻程度,现在有的机器已经上了2k的屏幕了。而这里的像素点数的单位就是px。
dp
但是Android设备的屏幕大小不,这就对屏幕设配增加了难度。所以,为了满足不同分辨率的设备。Android使用了dp,dp是一种相对单位(根据屏幕的像素密度,也就是每英寸像素数的不同而调整),能够尽量保证相同数值的dp长度在不同的设备上显示的实际尺寸大致一样。sp
同样的,sp是针对于文字的一种相对尺寸单位,其也会根据屏幕的像素密度的不同而调整,并考虑了字体不同的影响。
| 密度 | ldpi | mdpi | hdpi | xhdpi | xxhdpi |
|---|---|---|---|---|---|
| 密度值 | 120 | 160 | 240 | 320 | 480 |
| 分辨率 | 240*320 | 320*480 | 480*800 | 720*1280 | 1080*1920 |
| dp、px的关系 | 1dp = 0.75px | 1dp = 1px | 1dp = 1.5px | 1dp = 2.0px | 1dp = 3.0px |
在Android中使用mdpi,即密度值为160的屏幕为标准。在这样的屏幕下,1dp = 1px。所以,可以参照上表得到换算比例。
ldpi:mdpi:hdpi:xhdpi:xxhdpi = 3:4:6:8:12
所以就有了dp、sp、px之间的转换,为了方便使用,我们可以单独抽出一个类,进行封装。
|
|
当然,系统也是提供好了一个TypedValue类帮助我们转换单位。
|
|
看一下,applyDimension方法内部实现:
|
|
看到了吧,其实和我们上面的写法一致,只不过是系统帮助我们封装好的。