1. dp,px,dpi,sp等概念
- 屏幕尺寸:就是我们平常讲的手机屏幕大小,为屏幕的对角线长度,一般讲的大小单位都是英寸。比如iPhone5S的屏幕尺寸是4英寸。Samsung Note3是5.7英寸。
- 像素(px):把屏幕放大,看到的那一个个小点或者小方块就是像素了。
- 分辨率:是指屏幕上垂直方向和水平方向上的像素个数。比如iPhone5S的分辨率是1136640;Samsung Note3的分辨率是19201080;
- dip:(dot per inch)就是每英寸的像素数,也叫做屏幕密度。这个值越大,屏幕就越清晰。iPhone5S的dpi是326; Samsung Note3 的dpi是386;
- dp(dip):Density independent pixel的缩写,指的是抽象意义上的像素,设备无关像素,跟设备的屏幕密度有关系。
- sp:(Scale-independent Pixel)sp和dp很类似但唯一的区别是,一般用于自定义文字尺寸大小(小、正常、大、超大等等)。
2.各单位之间的转换
- 计算dpi
比如一个机器,屏幕4寸,分辨率480X800,因为不知道边长,肯定不能分开算,4是对角线长度,那直接用勾股定理算对角线像素,除以4,算出来大概是 dpi = 233 像素/英寸,那么density就是 (233 px/inch)/(160 px/inch)=1.46 左右。顺带说下,android默认的只有3个dpi,low、medium和high,对应 120、160、240,如果没有特别设置,所有的dpi都会被算成这3个,其中的default就是160。 - 计算dp和px
dp与px的换算公式如下: dp = (dpi/(160像素/英寸)) px = density px。注意,这里都是带单位的。px是单位,dp是单位,density没单位。假设dpi是240 像素/英寸,那么density就是1.5,dp=1.5px ,注意这是带了单位的,也就是设备无关像素 = density 像素,那么转换为数值计算的话,即dp= density * px。在160dpi的屏幕上,1dip=1px。
3.为什么在布局时候最好用dp,不要用px?
是因为这个世界上存在着很多不同屏幕密度的手机,屏幕密度是什么?就是dpi,就是单位长度里的像素数量。想象一下,如果这些手机的尺寸一样,屏幕密度相差很大,那么是不是说一个手机水平方向上像素很少,另一个手机水平方向上像素很多?那我们画同样pix数量的时候,它显示的长度不就会不一样了?比如下面图中的两个手机,同时设置2px长度的Button,在屏幕密度较高的手机里就会显示的比较小。而同时设置的2dip长度的Button,在两个手机上显示的大小是一样的。
网友评论