有一天测试突然提了个bug,她用的三星手机不能切换语言了。本来以为是特殊型号的问题 ,想搁置一段时间 不忙了以后再研究适配,结果让她安装了前几个版本的app,发现没有问题那就是最近发的几个版本的代码导致的了。
排查过程略过,直接上问题代码
public Resources getResources() {
Resources resources = super.getResources();
// fontScale不为1,需要强制设置为1
if (resources.getConfiguration().fontScale != 1) {
Configuration newConfig = new Configuration();
// 设置成默认值,即fontScale为1
newConfig.setToDefaults();
resources.updateConfiguration(newConfig, resources.getDisplayMetrics());
}
return resources;
}
某个版本的基类里加上了强制缩放字体的代码,我估计是测试的手机系统 执行这段代码的时候,没有将旧的config的语言信息带到新的config 中导致的,手动赋值一下即可。
public Resources getResources() {
Resources resources = super.getResources();
// 保存原始的 Configuration 对象
Configuration originalConfig = resources.getConfiguration();
// 创建一个新的 Configuration 对象,并复制原始 Configuration 的值
Configuration newConfig = new Configuration(originalConfig);
// fontScale 不为 1,需要强制设置为 1
if (newConfig.fontScale != 1f) {
newConfig.fontScale = 1f;
}
// 更新 Configuration 对象
resources.updateConfiguration(newConfig, resources.getDisplayMetrics());
// 恢复原始的 Configuration 对象
resources.updateConfiguration(originalConfig, resources.getDisplayMetrics());
return resources;
}
下班收工。