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

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐