android 7.0 ,6.0本地多语言切换失效

android 7.0 ,6.0多语言切换失效,9.0,10.0正常

最近做了一个海外的项目,做中、英、泰三种语言的切换,切换多语言时候重启HomeActivity,在Application和BaseActivity里重写attachBaseContext方法去设置Context。
曾经的切换方式很简单:

 /**
     * 此方法先于 onCreate()方法执行
     * @param newBase
     */
    @Override
    protected void attachBaseContext(Context newBase) {
     
        //获取我们存储的语言环境  "en","zh"
        String language = SpUtil.getInstance(MiaApplication.getApp()).getString(SpUtil.LANGUAGE);
        /**
         * attach对应语言环境下的context
         */
        super.attachBaseContext(LanguageUtil.attachBaseContext(newBase, language));
    }

测试机版本8.0以下,结果切换多语言竟然无效,8.0以上的手机正常切换,在github上拉了个demo,运行下来正常,然后再到copy到自己项目里面就废了。demo用的是support包,项目用的是AndroidX包,然后上网搜索,根本搜不到任何相关的帖子,都2020年以前的,在国外的帖子上找到了原因,因为引用了androidx.appcompat:appcompat:1.1.0导致多语言切换失效,谷歌也是坑人啊。

解决方案
在BaseActivity里面修改,做androidx的兼容即可完美解决:

public class BaseActivity extends AppCompatActivity {
     

    /**
     * 此方法先于 onCreate()方法执行
     * @param newBase
     */
    @Override
    protected void attachBaseContext(Context newBase) {
     
        //获取我们存储的语言环境  "en","zh"
        String language = SpUtil.getInstance(MiaApplication.getApp()).getString(SpUtil.LANGUAGE);
        /**
         * attach对应语言环境下的context
         */
        super.attachBaseContext(LanguageUtil.attachBaseContext(newBase, language));
    }

    @Override
    public void applyOverrideConfiguration(Configuration overrideConfiguration) {
     
        // 兼容androidX在部分手机切换语言失败问题
        if (overrideConfiguration != null) {
     
            int uiMode = overrideConfiguration.uiMode;
            overrideConfiguration.setTo(getBaseContext().getResources().getConfiguration());
            overrideConfiguration.uiMode = uiMode;
        }
        super.applyOverrideConfiguration(overrideConfiguration);
    }
}

你可能感兴趣的:(android,多语言切换,本地语言切换,android,安卓,bug)