Android中 dp,px,dpi三者之间的关系

首先弄明白三个概念

dp/dip(Density-independent pixel ) 设备独立像素(是一个关联Density和pixel的虚拟像素单位)
dpi (dots per inch) 每英寸的像素的数量(每英寸等于2.54厘米 .通常说的屏幕尺寸是屏幕的对角线长度)
px (pixels)像素  屏幕实际的像素,不同设备显示效果相同。例如,320*480的屏幕在横向有320个象素,在纵向有480个象素。

Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi)


在程序运行时,系统根据屏幕的实际密度透明的处理任何需要缩放的设备独立像素单元,设备独立像素转换成屏幕实际像素的换算很简单px = dp * (dpi/ 160).  pixls=160*(320/160)
对这个公式解释: 
例如:屏幕的物理尺寸为1.5英寸x2英寸,屏幕分辨率为240x320,则我们可以计算出在这部手机的屏幕上,每英寸包含的像素点的数量为240/1.5=160dpi(横向)或320/2=160dpi(纵向),Android API 说,如果屏幕密度为160,这时dp和px是一样的。1dp=1px; 例如 有一张定义为“100dp”的图片,在像素密度中(160dpi,也就是说240*320)手机上实际显示100px,如果你换成高(240dpi)上,那么就会显示 240/160 *100=150px
如果你把图片定义为 “100px”,在像素密度中(160dpi)显示是一样的,如果换高(240dpi),它每英寸放的像素的数量多,只用图片长度的一半就把一张图片放下了,看起来就短了一半,所以通常用dp

附加API:
The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, which is the baseline density assumed by the system for a "medium" density screen.


总结:
drawable-xhdpi 1dp=2px   
drawable-hdpi  1dp=1.5px  
drawable-mdpi  1dp=1px  
drawable-ldpi  1dp=0.75px


sp:
与缩放无关的抽象像素(Scale-independent Pixel)。sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

你可能感兴趣的:(Android)