一个iOS开发者的android修行之路三:布局开发单位对比(pt VS dp)

说到布局和适配,就不得不谈论下iOS和Android二者布局的单位:pt(point,点)和dp(Device independent pixel,Density independent pixel, DIP, DP,又叫与设备无关像素或与密度无关像素或密度独立像素)。注意:这里说的point和和印刷行业的单位point(1pt = 1/72 inch)是有区别的,看到好多文章都将iOS的pt和印刷行业的pt单位给等同起来这非常的误人子弟。

先说结论:

  1. 相同点:都是为了适配不同屏幕不同尺寸的移动设备而设计出来的一种单位,用于表示UI布局尺寸与设备屏幕密度无关

  2. 不同点:一:pt是iOS设备的布局尺寸单位,苹果公司给的定义是:1pt = 1/163 inch,dp是android设备的布局尺寸单位,Wikipedia给的定义对于android设备:1dp = 1/160 inch;二:像素(pixels)和二者的转换关系不同:iOS pt = pixels * ( ppi/163)Android dp = pixels * (ppi/160)

在说二者的异同之前,我们得先清楚几个概念(以下概念都是在屏幕、显示器这个语境下的定义讨论的):

  • inch:英寸,长度单位,1英寸 = 2.54 厘米;

  • px:pixels,像素,组成图片、视频的基本显示单位;

  • dpi:dots per inch,每英寸的点数又叫点密度;可以和下面的ppi概念等同

  • ppi:pixels per inch,每英寸的像素值又叫像素密度,每英寸像素值越高,屏幕能显示的图像也越精细,5ppi表示每平方英寸有5*5个px

  • 屏幕尺寸(screen size):最通俗的理解就是:屏幕对角线的长度,如5.8英寸的iPhoneX;

    5.8英寸的iPhoneX

  • 屏幕分辨率(resolution):手机的屏幕分辨率代表横向和纵向的像素值,如上图iPhoneX的分辨率是1125px * 2436px

通过上面的定义,我们知道ppi、屏幕尺寸、屏幕分辨率这三者的关系为:

ppi = 屏幕对角线的像素值/屏幕尺寸 = √ (屏幕横向像素值^2 + 屏幕纵向像素值^2)/对角线长度

根据上面的公式,我们计算下iPhoneX的像素密度为:√ (1125^2 + 2436^2)/5.8 ≈ 458ppi

px、pt、dp的相互转换

  1. px、pt、dp是静态测量 - 它们不会因其他因素而改变;
    1px总是1px,是可以显示颜色的屏幕中最小的一块。
    1pt总是1pt,是一个抽象单位,只有与其他点相关时才有意义,dp同理。
  2. pt、dp与px不同,因为它们根据ppi更改大小:
    在iPhone上,当屏幕像素密度为163ppi时,也就是Retina显示屏时代之前,所有的iPhone(iPhone 2G, 3G, 3GS),1pt等于1px;在326ppi上(iPhone 4,5和6),1pt等于2px*2px,或总共4px素,意味着你的100x100图像将渲染在Retina设备上将是163ppi设备的四分之一大小;在401ppi上(iPhone 6Plus、7Plus、8Plus)这样的,1pt等于3px*3px,或者9px。
    pt和px

    iPhone所有机型的分辨率如下图:
    The Ultimate Guide To iPhone Resolutions

参考文章:

  1. Mobile design 101: pixels, points and resolutions
  2. The Ultimate Guide To iPhone Resolutions
  3. iOS 的 APP 在系统中如何适应 iPhone 5s/6/6 Plus 三种屏幕的尺寸

推荐阅读更多精彩内容