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

devtools/2024/10/18 14:05:38/

运营反馈,老年用户的手机多设置为大字体,在使用我们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;@Overridepublic Resources getResources() {Resources resources = super.getResources();return DisplayUtil.getResources(this,resources,fontScale);}@Overrideprotected 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.ppmy.cn/devtools/126737.html

相关文章

QT--自定义信号槽、信号槽的连接方式、信号槽扩展、一个信号连接两个槽函数、多个信号连接一个槽函数、信号连接信号、断开连接

自定义信号槽 自定义信号和槽的条件: 自定义的类,要继承自 QObject自定义的类,其中要声明一个宏 Q_OBJECT 只有满足了这两个条件才可以正常使用信号槽机制 接下来,我们通过一个案例,演示自定义信号槽的使用。 案例…

python爬虫之使用 Beautiful Soup

Beautiful Soup 是 Python 中用于从 HTML 和 XML 文件中提取数据的库。它通常与 HTTP 请求库(如 requests)一起使用来构建网络爬虫。以下是一个详细的教程,教你如何使用 Beautiful Soup 来爬取网页内容。 1. 安装必要的库 首先,…

开发中众多框架的个人理解,Unity设计模式,MVC,MVVM框架

前往个人博客,获取更好的阅读体验 开发中众多框架的个人理解 首先,无论使用什么框架,使用什么设计模式,本质都是为了分离逻辑,方便扩展,多人协同。换句话说,就是让代码质量更高; 所以并不需要具…

问:JVM当中的垃圾分类怎么搞?

在Java中,JVM(Java虚拟机)的垃圾识别与分类是自动内存管理的重要组成部分。这一过程主要通过垃圾收集器(Garbage Collector)实现,旨在识别和回收不再被程序引用的对象,以释放内存空间。 1. 垃圾…

[k8s理论知识]3.docker基础(二)隔离技术

容器其实是一种沙盒技术,其核心是通过约束和修改进程的动态表现,为其创建一个边界。这个边界确保了应用与应用之间不会相互干扰,同时可以方便在不同的环境中迁移,这是PaaS最理想的状态。 程序是代码的可执行镜像,通常…

极简版Java敏感词检测SDK

敏感词工具 sensitive-word 基于 DFA 算法实现的高性能敏感词工具,开源在GitHub:https://github.com/houbb/sensitive-word。用于敏感词/违禁词/违法词/脏词等的识别和阻拦,是基于 DFA 算法实现的高性能 java 敏感词过滤工具框架。 使用场景…

滚雪球学Redis[5.3讲]:Redis持久化优化深度解析:RDB与AOF的策略选择与实践

全文目录: 🎉前言🚦Redis的监控与报警🔄1. 使用Redis自带工具进行监控🎯1.1 Redis常用监控命令🎯1.2 Redis配置文件中的监控相关参数 ⚙️2. 使用第三方工具进行Redis监控💡2.1 Prometheus与Red…

【Mac苹果电脑安装】DBeaverEE for Mac 数据库管理工具软件教程【保姆级教程】

Mac分享吧 文章目录 DBeaverEE 数据库管理工具 软件安装完成,打开效果图片Mac电脑 DBeaverEE 数据库管理工具 软件安装——v24.21️⃣:下载软件2️⃣:安装JDK,根据下图操作步骤提示完成安装3️⃣:安装DBeaverEE&#…