Android 一行代码全局应用内屏蔽系统设置字体和显示大小

tips: 一行代码引入看方式三

方式一

/** * 重写 getResource 方法,防止系统字体影响 */
  @Override
  public Resources getResources() { //禁止app字体大小跟随系统字体大小调节
    Resources resources = super.getResources();
    Configuration configuration = new Configuration();
    configuration.setToDefaults(); 
    resources.updateConfiguration(configuration, resources.getDisplayMetrics());
    return resources;
  }

或者:

/** * 重写 getResource 方法,防止系统字体影响 */
  @Override
  public Resources getResources() { //禁止app字体大小跟随系统字体大小调节
    Resources resources = super.getResources();
    if (resources != null && resources.getConfiguration().fontScale != 1.0f) { 
      android.content.res.Configuration configuration = resources.getConfiguration();
      configuration.fontScale = 1.0f;
      resources.updateConfiguration(configuration, resources.getDisplayMetrics());
    }
    return resources;
  }

方式二

!!! 以下方法亲测可行,首先是屏蔽系统设置的字体大小:**

1. 在activity和fragment的父类OnCreate()调用

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState);
        adjustFontScale( getResources().getConfiguration());
 /** * 设置字体大小不被系统设置影响 * @param configuration 字体配置 */
    private void adjustFontScale( Configuration configuration) { 
        // 0.8 为应用内字体缩放比例
        configuration.fontScale = (float) 0.8;
        DisplayMetrics metrics = getResources().getDisplayMetrics();
        WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
        wm.getDefaultDisplay().getMetrics(metrics);
        metrics.scaledDensity = configuration.fontScale * metrics.density;
        getBaseContext().getResources().updateConfiguration(configuration, metrics);
    }

2. 在AndroidManifest.xml配置

在已注册的activity中添加 ( fontScale ),如:

<!--主要是fontScale属性-->
<activity
            android:name=".ui.MainActivity"
            android:launchMode="singleTask"
        android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation|fontScale"/>
        

!!! 接着,是屏蔽系统设置的显示大小:(部分机型的系统设置无该选项则可跳过)**

1. 添加工具类(通过反射获取系统设置api)

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 1.
        adjustFontScale( getResources().getConfiguration());
        // 2.
        DisplayUtil.setDefaultDisplay(this);
public class DisplayUtil {
    /**
     * 获取手机出厂时默认的densityDpi
     *
     * @return
     */
    @SuppressLint("PrivateApi")
    public static int getDefaultDisplayDensity() {
        try {
            Class<?> aClass = Class.forName("android.view.WindowManagerGlobal");
            Method method = aClass.getMethod("getWindowManagerService");
            method.setAccessible(true);
            Object iwm = method.invoke(aClass);
            Method getInitialDisplayDensity = iwm.getClass().getMethod("getInitialDisplayDensity", int.class);
            getInitialDisplayDensity.setAccessible(true);
            Object densityDpi = getInitialDisplayDensity.invoke(iwm, Display.DEFAULT_DISPLAY);
            return (int) densityDpi;
        } catch (Exception e) {
            e.printStackTrace();
            return 500;
        }
    }

    /**
     * 获取手机出厂时默认的densityDpi并设置给手机
     * 在需要用到的activity中的onCreate中调用该方法
     *
     * @param context
     */
    public static void setDefaultDisplay(Context context) {
        if (Build.VERSION.SDK_INT > 23) {
            Configuration origConfig = context.getResources().getConfiguration();
            origConfig.densityDpi = getDefaultDisplayDensity();//获取手机出厂时默认的densityDpi
            context.getResources().updateConfiguration(origConfig, context.getResources().getDisplayMetrics());
        }
    }
}

2. 在AndroidManifest.xml配置

在已注册的activity中添加 ( density )

<activity
            android:name=".ui.MainActivity"
            android:launchMode="singleTask"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation|fontScale|density"/>

方式三

一行代码即可屏蔽系统设置显示大小以及字体大小

  1. 引入第三方屏幕适配库AndroidAutoSize
implementation me.jessyan:autosize:1.1.2
  1. 在BaseApplication初始化AndroidAutoSize
    主要调用setExcludeFontScale()方法
// 屏幕适配
        AutoSizeConfig.getInstance()
              .setBaseOnWidth(false)	// 是否以宽度作为适配标准
              .setExcludeFontScale(true) // 屏蔽显示大小以及字体大小
              .setDesignHeightInDp(720); // 设计图高度
    原文作者:cdAndroid
    原文地址: https://blog.csdn.net/weixin_44352679/article/details/104910092
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞