如果你还不懂屏幕适配,大概是缺点前置技能了
-
分辨率、屏幕尺寸、dpi
dp转px
dp存在的问题?
density和dpi -
获取分辨率
获取density和dpi
px
像素。构成影像的基本单位
分辨率、屏幕尺寸、dpi
分辨率:横向、纵向上的像素总数,单位px。如1920x1080
屏幕尺寸:手机对角线的物理尺寸,单位英寸(inch)。如5.5inch
dpi:像素密度,每英寸(对角线)的像素点数,单位dpi
计算屏幕密度:
分辨率=1920x1080,屏幕尺寸=5.5inch,像素密度=(√1920^2+1080^2)/5.5=400dpi
dp转px
dp: 独立像素密度。android中会在渲染前将dp转为px,计算公式:px = dp * (dpi / 160)
dpi=160 -> 1dp=1px
dpi=240 -> 1dp=1.5px
dpi=320 -> 1dp=2px
...
像素密度越大,1dp对应的像素就越多
dp存在的问题?
假设设计图的尺寸按宽度是360dp设计
以分辨率=1920x1080,屏幕尺寸=5.5inch,像素密度=(√1920^2+1080^2)/5.5=400dpi的手机为例
根据公司屏幕宽度=1080/(400/ 160)=432dp
结论:实际宽度比设计图宽度还大
如果手机的屏幕宽度更小
如720/(400/160)=288dp
结论:实际宽度比设计图宽度还小,就会导致显示不全
density和dpi
density :密度。android中以160dpi为基准,计算公式:density = dpi / 160
dpi=160 -> density=1
dpi=240 -> density=1.5
dpi=320 -> density=2
获取分辨率
// 屏幕宽(像素,如:480px)
int screenWidth = getWindowManager().getDefaultDisplay().getWidth();
// 屏幕高(像素,如:800px)
int screenHeight = getWindowManager().getDefaultDisplay().getHeight();
获取density和dpi
DisplayMetrics dm = getResources().getDisplayMetrics();
// 密度(如:1.0/1.5/2.0)
float density = dm.density;
// 像素密度(如:160/240/320)
int dpi = dm.densityDpi;
网友评论