文章目录
- 1.px和ppi(dpi)
- 2. dp和px
1.px和ppi(dpi)
分辨率
:分辨率就是手机屏幕的横向像素×竖向像素, 常见的分辨率有480×800、720×1280、1080×1920等,像素单位是px
。
屏幕尺寸
:屏幕尺寸指屏幕的对角线
的长度,单位是英寸,1英寸=2.54厘米
。
屏幕像素密度
:屏幕像素密度指每英寸屏幕所拥有的像素点数,英文简称ppi
(pixels per inch,每英寸像素数), 另外还有个dpi
(dots per inch
,每英寸多少点), 设计师切图的时候以dpi
为准,而屏幕分辨率参数中给的是ppi
, 所以一般我们可以简单的认为ppi
等价于dpi
。
假如我们知道一部手机的分辨率是1080×1920
,屏幕大小是5
英寸,怎么算出此屏幕的密度呢?
根据勾股定理,对角线的像素数 =2203,2203除以5就是此屏幕的密度了,计算结果是440。
5英寸1080×1920的屏幕密度是440,而相同分辨率的4.5英寸屏幕密度是490。如此看来,屏幕密度将会出现很多数值,呈现严重的碎片化。而密度又是安卓屏幕将界面进行缩放显示的依据,那么安卓是如何适配这么多屏幕的呢?
其实,每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480。
安卓对界面元素进行缩放的比例依据正是初始的固定密度,比如前面计算的440就可能近似适配到初始的固定密度480。
参考官方说明: https://developer.android.com/guide/topics/resources/providing-resources
2. dp和px
dp
也可写为dip
,即density-independent pixel
, 有点类似于windows的DIB, 也就是它具有设备无关性
,比如一张宽和高均为100dp
的图片在320×480
和480×800
的手机上肉眼“看起来”一样大。而实际 上,它们的像素值px
并不一样。
在安卓中,系统密度为160dp
的mdpi
手机屏幕为基准屏幕,即320×480
的手机屏幕。在这个屏幕中,1dp=1px
。
5个基本密度之间的缩放比为 3:4:6:8:12:16
, 相隔数值之间是2倍的关系, 如上图所示。
所以如果设计师制作效果图,在mdpi
中给了张100px
的图(1dp=1px
,即100dp
),那么mdpi
对应4, xhdpi
对应8,2倍的关系, 要实现同样的100dp
, xhdpi
的图大小要到200px
。
反着计算更重要,比如你用PhotoShop在720×1280
(xhdpi
)的画布中制作了界面效果图,两个元素的间距是20px
,那要标注多少dp呢?2倍的关系,那就是 10dp
。
当安卓系统字号设为普通时,sp
与px
的尺寸换算和dp
与px
是一样的。比如某个文字大小在720×1280的PhotoShop画布中是24px
,那么这个文字大小是12sp
。