涉及到屏幕显示的密度单位和度量单位
本次涉及到的单位有dpi、ppi、dp、sp、px、pt、in
密度单位
ppi : 图像分辨率(在图像中,每英寸所包含的像素数目)
dpi :打印分辨率 (每英寸所能打印的点数,即打印精度)
p p i = 长 度 像 素 数 2 + 宽 度 像 素 数 2 屏 幕 对 角 线 英 寸 数 ppi=\sqrt{\frac {长度像素数^2+宽度像素数^2}{屏幕对角线英寸数}} ppi=屏幕对角线英寸数长度像素数2+宽度像素数2
举例:iphone5的ppi计算
1136 p x 2 + 640 p x 2 4 i n = 326 p p i \sqrt{\frac {1136px^2+640px^2}{4in}}=326ppi 4in1136px2+640px2=326ppi
物理长度单位
in :英寸
pt :物理尺寸,表示一个点,是一英寸的1/72
1 i n = 72 p t 1in=72pt 1in=72pt
1 p t = d p i 72 p x 1pt=\frac {dpi}{72}px 1pt=72dpipx
当photoshop中新建画布的分辨率为72ppi( 即 72dpi时 ), 1pt=1px; 当新建画布分辨率为72*2=144ppi时,1pt=2px
度量单位
px :像素
dp :Density-independent pixels,以160PPI屏幕为标准,则 1 d p = 1 p x 1dp=1px 1dp=1px
d p ∗ p p i 160 = p x \frac{dp*ppi}{160}=px 160dp∗ppi=px
sp :Scale-independent pixels,它是安卓的字体单位,以160PPI屏幕为标准,当字体大小为 100%时, 1 s p = 1 p x 1sp=1px 1sp=1px
sp和px的转换公式:
s p ∗ p p i 160 = p x \frac{sp*ppi}{160}=px 160sp∗ppi=px
是不是看起来dp和sp一样,在Android设计原则中,有提到这两个单位,他建议文字的尺寸一律用sp单位,非文字的尺寸一律使用dp单位。例如textSize=“16sp”、layout_width=“60dp”。
为什么要把sp和dp代替px?最简单的原因是他们不会因为ppi的变化而变化,在相同物理尺寸和不同ppi下,他们呈现的高度大小是相同。也就是说更接近物理呈现,而px则不行。
当文字尺寸是“正常”时1sp=1dp,而当文字尺寸是“大”或“超大”时,1sp>1dp