美文网首页
Android 自定义字体大小、显示大小、语言(不跟随系统)简单

Android 自定义字体大小、显示大小、语言(不跟随系统)简单

作者: 可乐_JS | 来源:发表于2023-04-23 12:18 被阅读0次
    1.直接上代码,先新建一个工具类
    public class ConfigurationUtil {
    
        private static final String TAG = "ConfigurationUtil";
        public static final float DEFAULT_FONT_SCALE = 1.0f;
    
        /**
         * 更新configuration
         *
         * @param res 资源
         * @return
         */
        @NonNull
        public static Resources updateConfiguration(Context context, Resources res) {
            Configuration configuration = res.getConfiguration();
            //设置字体大小
            float fontScale = configuration.fontScale;
            if (!SizeUtil.isFloatValueEquals(fontScale, DEFAULT_FONT_SCALE)) {
                Log.i(TAG, "updateConfiguration reset fontScale = " + fontScale);
                configuration.fontScale = DEFAULT_FONT_SCALE;
            }
            //设置dpi
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
                int densityDpi = configuration.densityDpi;
                if (densityDpi != DisplayMetrics.DENSITY_DEVICE_STABLE) {
                    Log.i(TAG, "updateConfiguration reset densityDpi = " + densityDpi);
                    Log.i(TAG, "updateConfiguration DENSITY_DEVICE_STABLE = " + DisplayMetrics.DENSITY_DEVICE_STABLE);
                    configuration.densityDpi = DisplayMetrics.DENSITY_DEVICE_STABLE;
                }
            }
            //设置语言
            boolean isEnglish = context == null ? false : MyApplicationUtils.readBooleanConfig(context, GlobalKeys.CURRENT_IS_ENGLISH);
            Locale locale = isEnglish ? Locale.ENGLISH : Locale.SIMPLIFIED_CHINESE;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                configuration.setLocale(locale);
            } else {
                configuration.locale = locale;
            }
            res.updateConfiguration(configuration, res.getDisplayMetrics());
            return res;
        }
    }
    
    2.再分别在Application和BaseActivity中重写geResources,即可。
        @Override
        public Resources getResources() {
            Resources res = super.getResources();
            return ConfigurationUtil.updateConfiguration(this, res);
        }
    

    之所以要重写Application和Activity的原因如下

    截屏2023-04-24 14.06.54.png

    相关文章

      网友评论

          本文标题:Android 自定义字体大小、显示大小、语言(不跟随系统)简单

          本文链接:https://www.haomeiwen.com/subject/obzejdtx.html