手机屏幕单位

先插一句比较小白的话。。
点动成线,其实我们看到的屏幕是一个个像素点显示的,密集的点显示成所看到的图像。

###常见的单位:in、px、dpi(ppi、density)、dp(dip)、sp

in:inch,英寸,每英寸大约是2.54厘米,一般手机所说的屏幕多少寸都是指对角线的长度。

px:Pixel,像素,最小单位,指每一个像素点。通常所说的分辨率1920*1080就是指各个方向上的像素点的数量。

dpi(ppi、density):
dpi为Dots Per Inch的缩写,表示每英寸点的个数,一般用于打印分辨率。
ppi为Pixels Per Inch的缩写,表示每英寸像素点的个数,一般用于显示分辨率。
density,密度,表示每Inch点的个数。
计算方法为px/in即可。

安卓的资源列表文件夹与其对应:

drawable-ldpi         (dpi=120 , density = 0.75)
drawable-mdpi         (dpi=160 , density = 1,这也是默认的layout文件夹)
drawable-hdpi         (dpi=240 , density = 1.5)
drawable-xhdpi         (dpi=320 , density = 2)
drawable-xhdpi         (dpi=480 , density = 3)
drawable-xxxhdpi     (dpi=640 , density = 4)

dp(dip):密度无关像素, Density Independent Pixels的缩写,dp * density = px。不会因为像素而导致显示效果不同。

sp:Scaled Pixel, 主要用于调整字体大小,转换方法与dp一样,但是会随着系统设置而变化字体大小.

默认的icon大小为48dp*48dp

默认的通知栏icon大小为24dp*24dp

适配时建议根据设计图计算密度,如iphone5的设备分辨率为640X1164, 屏幕尺寸为4英寸,那么由勾股定理对角线平方为640*640+1164*1164=1764496,开根号得出对角线分辨率为1328,1328/4=332,这就是iphone5的”dpi”,所以可以把iphone5的对应设计图放在xhdpi文件夹中。

加载资源时,Android会先根据屏幕的dpi在dpi相同的资源文件夹中找资源,然后从最大的资源文件夹开始找。
所以推荐在dpi最高的文件夹放置一套资源文件即可,对资源的长高设定wrap_content,系统会自动缩放保持显示效果。如100px*100px的图放在xhdpi中,那么mdpi的设备显示时,1001/2 = 50px,那么该图就会以50px\50px的大小显示。

LayoutParams实例化时传的参数为px,需要将布局的dp转为px才能使效果一样。
LayoutParams初始化时需要初始化为父布局的类型
dp转px的方法为:

int dip = (int)TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,60,getResources().getDisplayMetrics());