//修改系统内部的density。 package com.example.screenadaptation; import android.app.Activity; import android.app.Application; import android.content.ComponentCallbacks; import android.content.res.Configuration; import android.util.DisplayMetrics; /** * 布局文字适配各种不同屏幕 */ public class DensityAdapter { //设计稿的目标宽度 private static final float WIDTH = 720; //720 * 1080 只要对应着修改设计稿的宽度即可适配。 private static float appDensity;//表示屏幕密度 private static float appScaleDensity;//字体缩放比例,默认是 appDensity //在activity setContentView之前调用这个方法。 public static void setDensity(final Application application, Activity activity) { //获取当前app的屏幕信息 DisplayMetrics displayMetrics = application.getResources().getDisplayMetrics(); if (appDensity == 0) { //初始化操作 appDensity = displayMetrics.density; appScaleDensity = displayMetrics.scaledDensity; //添加字体变化监听 application.registerComponentCallbacks(new ComponentCallbacks() { @Override public void onConfigurationChanged(Configuration newConfig) { //字体发生变化更改,重新对scaleDensity进行赋值 if (newConfig != null && newConfig.fontScale > 0) { appScaleDensity = application.getResources().getDisplayMetrics().scaledDensity; } } @Override public void onLowMemory() { } }); } //计算目标值density scaleDensity densityDpi float targetDensity = displayMetrics.widthPixels / WIDTH; float targetScaleDensity = targetDensity * (appScaleDensity / appDensity); int targetDensityDpi = (int) (targetDensity * 160); //替换activity 的density scaleDensity densityDpi DisplayMetrics activityDm = activity.getResources().getDisplayMetrics(); activityDm.density = targetDensity; activityDm.scaledDensity = targetScaleDensity; activityDm.densityDpi = targetDensityDpi; } }
修改density达到屏幕适配
最新推荐文章于 2024-09-27 01:33:45 发布