详解安卓开发中的DPI / DP / SP

背景

开发中有时还是会把dpi/dp/sp这几个单位搞混,因此查了一些相关资料,发现这篇详解安卓开发中的DPI / DP / SP 文章讲解的挺细致的,看完有种豁然开朗的感觉,赶紧做了搬运工,自己也简单做了一下总结.

DPI

1.概念

Dots Per Inch,Inch(英寸)是一个物理单位(无论在任何设备上,其大小都是固定的),所以DPI就指在一个Inch的物理长度内有多少个Dot,160DPI的屏幕就表示一个Inch包含160个Dot,320DPI的屏幕表示一个Inch有320个Dot,所以说Dot的大小是不固定的,对Android而言,DPI等价于PPI(Pixels-Per-Inch).

2.计算

通常我们说一个设备是多少寸时,指的是屏幕对角线(Diagonal)是多少inch,所以用对角线的像素值(px)除以对角线长度(inch),就可以计算出PPI(DPI).

PPI计算

DP/DIP

1.概念

Density-Independent pixel 或Device-Independent Pixel,虚拟的像素单位,它的大小不是一个物理(Phisical)值,而是由操作系统根据屏幕大小和密度动态渲染出来的,用dp可以做到简化适配工作.

2.PX跟DP之间的换算关系

dp =px * (dpi / 160)

iPad2 和 iPad Retina的物理尺寸都是 9.7 inch,不同的是分辨率和PPI,一个是1024x768 / 132ppi,另一个是2048x1536 / 264ppi,分别计算一下20dp对应多少inch?

iPad2

先算出20dp对应多少px : 20 * (132/160) = 16.5px;
根据px算出对应的inch,设为x,则 16.5 : (math.sqrt(1024 * 1024 + 768 * 768) = x : 9.7;
x = 0.1250390625;

同理 iPad Retina

x = 0.1250390625;

计算结果都是0.1250390625,这就是dp的功能,它能保证在所有的设备上显示的大小都一样.

如果只提供了一个大小为20px的图片,为了保证图片在所有设备上的物理大小都一样,高DPI的设备上系统会拉伸图片,低DPI的设备上图片会被缩小,这样既会影响UE也会影响APP的执行效率。

SP

用于字体大小,其概念与DP是一致的,也是为了保持设备无关。因为Android用户可以根据喜好来调整字体大小,所以要使用sp来表示字体大小。

你可能感兴趣的:(android单位)