美文网首页Android知识梳理android技术
Android 禁止App字体随系统大小而更改

Android 禁止App字体随系统大小而更改

作者: 雨落川川 | 来源:发表于2021-12-07 11:30 被阅读0次

      运营反馈,老年用户的手机多设置为大字体,在使用我们app过程中,由于字体被放大,导致布局错乱,部分功能按键遮挡,无法正常使用。
      收到问题,着手解决,除了对界面布局进行改写,改为约束布局,对app字体大小也进行统一管理,然而这不是主要的,最主要的是避免系统更改app字体的大小。
      Android提供了相关的方法用来实现

     public class DisplayUtil {
            /**
             * 保持字体大小不随系统设置变化(用在界面加载之前)
             * 要重写Activity的attachBaseContext()
             */
            public static Context attachBaseContext(Context context, float fontScale) {
                Configuration config = context.getResources().getConfiguration();
                //正确写法
                config.fontScale = fontScale;
                return context.createConfigurationContext(config);
            }
    
            /**
             * 保持字体大小不随系统设置变化(用在界面加载之前)
             * 要重写Activity的getResources()
             */
            public static Resources getResources(Context context, Resources resources, float fontScale) {
                Configuration config = resources.getConfiguration();
                if(config.fontScale != fontScale) {
                    config.fontScale = fontScale;
                    return context.createConfigurationContext(config).getResources();
                } else {
                    return resources;
                }
            }
    
            /**
             * 保存字体大小,后通知界面重建,它会触发attachBaseContext,来改变字号
             */
            public static void recreate(Activity activity) {
                activity.recreate();
            }
    }
    

      在BaseActivity中复写相关的方法:

     static float fontScale = 1f;
    
        @Override
        public Resources getResources() {
            Resources resources = super.getResources();
            return DisplayUtil.getResources(this,resources,fontScale);
        }
    
        @Override
        protected void attachBaseContext(Context newBase) {
            super.attachBaseContext(DisplayUtil.attachBaseContext(newBase,fontScale));
        }
        
        public void setFontScale(float fontScale) {
            this.fontScale = fontScale;
            DisplayUtil.recreate(this);
        }
    

    经测试,在设置中把字体调整为最大,打开app,app中字体均保持不变,测试华为,vivo,小米机型均生效,于是交付测试。

    相关文章

      网友评论

        本文标题:Android 禁止App字体随系统大小而更改

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