protected float initScaledDensity() {
int width = getResources().getDimensionPixelSize(R.dimen.design_width);
int single_chinese_width = getResources().getDimensionPixelSize(R.dimen.design_single_chinese_width);
int sp_value = getResources().getDimensionPixelSize(R.dimen.design_sp_value);
float designScaleDensity = (float) single_chinese_width / (float) sp_value;
float widthScale = (float) DensityUtil.getScreenW(App.this) / (float) width;
return widthScale * designScaleDensity;
}
package com.xincheng.lib.framework.base;
import android.app.Activity;
import android.app.Application;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import com.xincheng.lib.utils.ScreenUtil;
public abstract class BaseApp extends Application {
private static float originScaledDensity = 0.0f;
private static float scaledDensity;
private static int densityDpi;
@Override
public void onCreate() {
super.onCreate();
originScaledDensity = getResources().getDisplayMetrics().scaledDensity;
scaledDensity = initScaledDensity();
densityDpi = getDensityDpi();
ActivityLifecycleCallbacks activityLifecycleCallbacks = new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
ScreenUtil.adapterFontAndDrawable(activity, scaledDensity, densityDpi);
if (activity instanceof FragmentActivity) {
FragmentManager.FragmentLifecycleCallbacks fragmentLifecycleCallbacks = new FragmentManager.FragmentLifecycleCallbacks() {
@Override
public void onFragmentCreated(@NonNull FragmentManager fm, @NonNull Fragment f,
@Nullable Bundle savedInstanceState) {
super.onFragmentCreated(fm, f, savedInstanceState);
ScreenUtil.adapterFontAndDrawable(f, scaledDensity, densityDpi);
}
};
FragmentActivity fragmentActivity = (FragmentActivity) activity;
fragmentActivity.getSupportFragmentManager().registerFragmentLifecycleCallbacks(fragmentLifecycleCallbacks, true);
}
}
@Override
public void onActivityStarted(Activity activity) {
}
@Override
public void onActivityResumed(Activity activity) {
}
@Override
public void onActivityPaused(Activity activity) {
}
@Override
public void onActivityStopped(Activity activity) {
}
@Override
public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
}
@Override
public void onActivityDestroyed(Activity activity) {
}
};
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);
}
protected abstract float initScaledDensity();
protected abstract int getDensityDpi();
public static float getOriginScaledDensity() {
return originScaledDensity;
}
public static float getScaledDensity() {
return scaledDensity;
}
}
package com.xincheng.lib.utils;
import android.app.Activity;
import android.content.res.Resources;
import android.util.DisplayMetrics;
import androidx.fragment.app.Fragment;
public class ScreenUtil {
public static void adapterFontAndDrawable(Activity activity, float scaledDensity, int densityDpi) {
DisplayMetrics activityDM = activity.getResources().getDisplayMetrics();
Logger.e("url origin densityDpi=" + activityDM.densityDpi + ", density=" + activityDM.density + ", scaledDensity="
+ activityDM.scaledDensity);
activityDM.scaledDensity = scaledDensity;
activityDM.densityDpi = densityDpi;
}
public static void adapterFontAndDrawable(Fragment fragment, float scaledDensity, int densityDpi) {
DisplayMetrics activityDM = fragment.getResources().getDisplayMetrics();
Logger.e("url origin densityDpi=" + activityDM.densityDpi + ", density=" + activityDM.density + ", scaledDensity="
+ activityDM.scaledDensity);
activityDM.scaledDensity = scaledDensity;
activityDM.densityDpi = densityDpi;
}
public static void adapterScreen(Activity activity, int targetDP, boolean isVertical) {
DisplayMetrics systemDM = Resources.getSystem().getDisplayMetrics();
DisplayMetrics appDM = activity.getApplication().getResources().getDisplayMetrics();
DisplayMetrics activityDM = activity.getResources().getDisplayMetrics();
if (isVertical) {
activityDM.density = activityDM.heightPixels / (float) targetDP;
} else {
activityDM.density = activityDM.widthPixels / (float) targetDP;
}
activityDM.scaledDensity = activityDM.density * (systemDM.scaledDensity / systemDM.density);
activityDM.densityDpi = (int) (160 * activityDM.density);
}
public static void resetScreen(Activity activity) {
DisplayMetrics systemDM = Resources.getSystem().getDisplayMetrics();
DisplayMetrics appDM = activity.getApplication().getResources().getDisplayMetrics();
DisplayMetrics activityDM = activity.getResources().getDisplayMetrics();
activityDM.density = systemDM.density;
activityDM.scaledDensity = systemDM.scaledDensity;
activityDM.densityDpi = systemDM.densityDpi;
appDM.density = systemDM.density;
appDM.scaledDensity = systemDM.scaledDensity;
appDM.densityDpi = systemDM.densityDpi;
}
}