px dp 和 sp

安卓开发中经常遇到dp和sp这两个单位,以前也经常使用px这个单文。这里解释清楚这三个单位是什么关系。

px

即像素,屏幕上的图像是由像素点组成的,我们说屏幕上的图像长度有多少px,就是占了多少个像素点。

我现在用的22寸显示器分辨率高达1920*1080,但是居然某些手机也能达到这个分辨率,如果一个10px*10px的小巧的按钮在我的显示器上看起来不错,但是放到超高分辨率手机上就几乎小到看不见了。所以用现在GUI程序的设计中,更流行使用dp单位。

dp

device independent pixels,译作设备独立像素,android开发中早期叫dip,后来为了和sp统一,改叫dp。它是在像素密度(dpi,Dots Per Inch,即每英寸像素点数)基础上定义的一种长度单位。例如屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),160dpi就是这部手机的像素密度,横向和纵向的这个值都是相同的,原因是屏幕大多使用正方形的像素点。

Android系统定义了屏幕的四种像素密度,手机制造时需要符合其中某一种:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数。例如界面上有一个长度为80dp的图片,那么它在240dpi的手机上实际显示为80x1.5=120px,在320dpi的手机上实际显示为80x2=160px。这样图片就能合理缩放,使不同分辨率屏幕上,看到的图像差不多大(指物理上用英寸衡量差不多大)。

sp

sp单位专用于调节文字大小。Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。

最佳实践

Android框架提供的API中,操作图像相关的内容都是以px为单位的,布局中除了文字字号使用sp,其余使用dp。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。