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