Android像素单位dp、sp、px、pt的区别和比较

目录结构前言

在分辨率没有牛逼到爆的过去,程序员通常以像素为单位设计计算机用户界面。例如,图片大小为80×32像素。这样处理的问题在于,如果在一个每英寸像素点数更高的新显示器上运行该程序,,则用户界面图标会显得很小。在有些极端情况下,用户界面会小到难以看清内容。因为我们在Android应用程序开发中应使用与分辨率无关的度量单位。

Android支持dp、sp、px、pt等各种度量单位,下面介绍一下它们的概念和区别。

度量单位含义dip(dp)device independent pixels(设备独立像素)。不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA,HVGA和QVGA推荐使用这个,不依赖像素。pxpixels(像素)不同设备显示效果相同。spscaled pixels(放大像素)主要用于字体显示(best for textsize)。in英寸,长度单位。ptpoint,是一个标准长度单位,1pt = 1/72英寸,用于印刷业。换算规则

这里的换算规则主要是介绍px、dp、sp的换算规则。 从UI设计师和开发工程师的角度理解:

px(像素)是UI设计师在PS里使用的,同时也是手机屏幕上所显示的。 dp是开发工程师写layout的时候使用的尺寸单位,sp是开发写layout时关于字体的字号单位,且dp与sp总为1:1关系。

所以,UI设计师给出效果图时,标记的单位如果是dp或者sp,开发工程师就可以直接写Layout布局xml文件了。但是,如果UI设计师给出的单位是像素(px),那苦逼的开发工程师就要自行换算了。

在了解具体的换算规则之前,我先介绍一个概念,像素密度。假设有一部手机,屏幕的物理尺寸为1.5英寸*2英寸,屏幕分辨率为240*320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,像素密度的单位dpi是Dots Per Inch的缩写,即每英寸像素数量。横向和纵向的这个值都是相同的,原因是大部分手机屏幕使用正方形的像素点。

由于不同的手机或平板有不同的像素密度,而开发人员不可能为每款不同像素密度的手机开发相同的应用,因此Android想到了这点,Android系统本身定义了六种像素密度:

低(120dpi)、中(160dpi)、高(240dpi)、超高(320dpi)、超超高(480dpi)

由于在160dpi像素密度的情况下:px = dp,当在其他像素密度时,pxe和dp的换算规则是: 因为,在低、中、高、超高、超超高像素密度下,dp到px的换算系数分别为:

低(0.75)、中(1)、高(1.5)、超高(2)、超超高(3)

有了这个换算系数后,那假设UI设计师在在超高像素密度(xh)的手机上给你200px像素值宽度时,那你写在xml里对应的dp应该为:100dp。 dp和px的代码转换方法如下:

(Context context, float dpValue){final float scale = context.getResources().getDisplayMetrics().density;return (int)(dpValue * scale + 0.5f);}(Context context, float pxValue){final float scale = context.getResources().getDisplayMetrics().density;return (int)(pxValue / scale + 0.5f);}

想要成功,就一定要和成功的人在一起,不然反之

Android像素单位dp、sp、px、pt的区别和比较

相关文章:

你感兴趣的文章:

标签云: