学习笔记:屏幕适配方案(修改density适配)

702 阅读1分钟

原文:mp.weixin.qq.com/s/d9QCoBP6k…

1.代码

import android.app.Activity;
import android.app.Application;
import android.content.ComponentCallbacks;
import android.content.res.Configuration;
import android.util.DisplayMetrics;

public class DensityUtils {

    private static float appDensity;
    private static float appScaleDensity;

    private static final float WIDTH = 360; //单位DP

    public static void setDensity(Application application, Activity activity) {
        float targetDensity;
        float targetScaleDensity;
        int targetDensityDpi;
        DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics();
        if (appDensity == 0) {

            appDensity = displayMetrics.density;
            appScaleDensity = displayMetrics.scaledDensity;
            application.registerComponentCallbacks(new ComponentCallbacks() {
                @Override
                public void onConfigurationChanged(Configuration newConfig) {
                    if(newConfig!=null && newConfig.fontScale>0){
                        appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity;
                    }
                }

                @Override
                public void onLowMemory() {

                }
            });

        }

        targetDensity = displayMetrics.widthPixels / WIDTH;
        targetScaleDensity = targetDensity * (appDensity / appScaleDensity);
        targetDensityDpi = (int) (targetDensity * 160);

        DisplayMetrics dm = activity.getResources().getDisplayMetrics();

        dm.density = targetDensity;
        dm.scaledDensity =  targetScaleDensity;
        dm.densityDpi = targetDensityDpi;
    }
}

2.使用

可以在BaseActivity中调用

也阔以在application中调用