Android8.0 多语言切换原理(2)

1.版本差异:
Android6.0及以下,设置切换语言的接口调用的是updateLocale(Locale locale)废弃;
如Android7.0以上,设置切换语言的接口调用的是updateLocales(LocaleList locales)。作者当时就遇到这个问题,app在8.0上直接调不到方法崩溃了。
6.0及以下用法:
'''

    Resources resources = getContext().getResources();
    DisplayMetrics dm = resources.getDisplayMetrics();
    Configuration config = resources.getConfiguration();
    // 应用用户选择语言(直接修改即可)
    config.locale = Locale.ENGLISH;
    resources.updateConfiguration(config, dm);

'''

7.0以上用法:
'''

   Locale locale = new Locale(language,"CN");
   Resources res = context.getResources();
   Configuration config = new Configuration(res.getConfiguration());
   config.setLocale(locale);
   context = context.createConfigurationContext(config);

'''
2.有了以上配置,依旧无法看到 语言环境发生切换:因为在7.0以上的手机要想改变一个activity中文字,必须要重启当前的activity,还要修改全局的Configuration。
需要重写activity的attachBaseContext(Context方法并返回实例)

'''

 @Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(LocaleHelper.setLocale(base));
}

'''
'''

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    LocaleManager.setLocale(this);
}

'''

3.感觉写的还是不太深入,以后有空再研究一下。
优秀借鉴:https://juejin.im/entry/57ee1ad35bbb50005bdffb67和http://blog.csdn.net/u013656135/article/details/50555391

你可能感兴趣的:(Android8.0 多语言切换原理(2))