android 7.0 ,6.0本地多语言切换失效
16lz
2021-01-24
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); }}
更多相关文章
- C语言函数的递归(上)
- android 中定时器的几种用法总结
- Android(安卓)中TextView 添加超链接
- android内核编译方法 转载
- android中MediaPlayer的用法
- Android梳理不常用widget篇
- Android(安卓)Hook神器:XPosed入门与登陆劫持演示
- Android(安卓)TTS学习——TTS初体验
- Android(安卓)NDK 环境配置