Android 切换语言失效的bug

47 阅读1分钟

有一天测试突然提了个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;
    }

下班收工。