天天看点

关于手机屏幕单位

先插一句比较小白的话。。

点动成线,其实我们看到的屏幕是一个个像素点显示的,密集的点显示成所看到的图像。

常见的单位: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)
drawable-mdpi (dpi=160)
drawable-hdpi (dpi=240)
drawable-xhdpi (dpi=320)
drawable-xxhdpi (dpi=480)
           

dp(dip):设备独立像素,Device Independent Pixels的缩写,Android特有的单位。不会因为像素而导致显示效果不同。

sp:主要用于调整大小。

加载资源时,Android会先根据屏幕的dpi在dpi相同的资源文件夹中找资源,然后从最大的资源文件夹开始找。

所以推荐在dpi最高的文件夹放置一套资源文件即可,对资源的长高设定wrap_content,系统会自动缩放保持显示效果不变。

LayoutParams实例化时传的参数为px,需要将布局的dp转为px才能使效果一样。

LayoutParams初始化时需要初始化为父布局的类型

dp转px的方法为:

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