当前位置: 首页 > article >正文

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

运营反馈,老年用户的手机多设置为大字体,在使用我们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,小米机型均生效,于是交付测试。



 


http://www.kler.cn/news/357094.html

相关文章:

  • 其他css的用途
  • 前端excel的实现方案Luckysheet
  • 用HTML标签承载页面内容:前端开发的基础知识
  • 每天5分钟玩转C#/.NET之goto跳转语句
  • React基础知识(一) - React初体验
  • 在Android中如何切割一张图片中的不规则“消息体/图片/表情包等等”?
  • nginx在access日志中记录请求头和响应头用作用户身份标识分析
  • 微信小程序上传组件封装uploadHelper2.0使用整理
  • NodeJS 使用百度翻译API
  • scala继承
  • Java中常见的自带数据结构类
  • (小白教程)MPV.NET 播放器安装和添加Bilibili弹幕
  • 速盾:cdn加速访问网站过程
  • 物理安全概述
  • 矩阵系统哪家好~矩阵短视频运营~怎么矩阵OEM
  • 【MR开发】在Pico设备上接入MRTK3(三)——在Unity中运行MRTK示例
  • C++算法练习-day9——24.两两交换链表中的节点
  • 快速上手C语言【下】(非常详细!!!)
  • 理工科考研想考计算机,湖南大学、重大、哈工大威海、山东大学,该如何选择?
  • 基于微信小程序的购物系统【附源码、文档】