什么是dp,为什么要使用dp而不是px

Android开发中,经常要使用dp做为度量单位,为什么不直接使用px呢?

首先要了解几个基本概念

Screen Size
: 屏幕尺寸,根据对角线度量,一般单位是英寸

英寸
: 1英寸=2.54厘米

px
: 像素,屏幕显示的内容是由一个个点组成的,每一个点就是一个像素

Screen density
: 屏幕密度,度量屏幕上一块物理区域中像素的个数多少,通常用dpi(dot per inch)作为单位,这里的点指像素。可以看出,像素的绝对大小是不定的,密度越高,每一像素所占的面积就越小。

Resolution
: 分辨率,通常所说的1080p,800X400指的就是分辨率,这里的数字指的是每个dimension上像素的个数。

了解了以上知识,就可以解释dp这个概念了。

dp是density-independnt pixel的缩写。字面上解释就是与像素密度(就是前面的Screen density)无关。

那么什么是与像素密度无关呢,为什么要用dp,而不直接使用px呢?

假如有这种情况,一个icon是50X50px,一块4英寸大的屏幕,分辨率为100X100px,那么,这个icon将占屏幕的1/4,如果分辨率为200X200,则占1/16. 可见,一块4英寸的屏幕,只因屏幕密度的不同,最终显示效果差距很大。这样会给用户体验带来很大的负效应。

如果icon的大小(指以像素为单位)能随着屏幕密度的变化自动调整,不就好了么?屏幕密度变大,icon也跟着变大。

这就是dp的作用。

因为icon最终要绘制到屏幕上,所以最终还是以px为度量单位,只是在此之前需要一个转化过程

px = dp * (dpi / 160)

可见,当dpi变大时,px可同比例变大。至于为什么是160,只是选的一个基准,在dpi=160的情况下,dp的大小是和px等同的。

你可能感兴趣的:(什么是dp,为什么要使用dp而不是px)