前提
平时xml中view的宽高单位都是dp居多,我们的设计师一般会选择一款机型的屏幕尺寸作为设计的目标尺寸。
那么,如何根据目标尺寸的屏幕密度,适配我们种类繁多的机型?
实现目标
将以dp作为单位,以目标尺寸标注的宽高,和当前机型的比例,动态进行屏幕适配。
例如:设计尺寸为360dp宽,我们的view设置180dp宽。那么,该view在任何屏幕尺寸下,都将占用屏幕一半的尺寸;
了解参数
在上代码前,先了解下待会用到的参数含义:
- density
当前机型的屏幕密度,标准屏幕密度是每平方英寸有160个像素,如果当前机型每平方英寸有320个像素,即density = (320 / 160)= 2; - scaleDensity
代表的是字体的屏幕密度,默认情况下:scaleDensity = density; - densityDpi
表示的就是每平方英寸显示的像素点个数。
如:160个像素点 即densityDpi=160;
上代码
代码其实非常简单,直接从DisplayMetrics中获取。
private final static float WIDTH = 360;//适配机型的宽为360dp,屏幕宽/屏幕密度=360dp
private static float appDensity;
private static float appScaleDensity;
public static void setDensity(Application application, Activity activity) {
//获取当前app的屏幕显示信息
DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
appDensity = displayMetrics.den