如果当切换系统语言后,需要更新界面的某些字符串资源显示,可以参考如下两种方法:
首先可以监听切语言变化的通知,可以使用广播或者监听配置变化
注册广播:
<action android:name="android.intent.action.LOCALE_CHANGED" />
Activity中覆写: public void onConfigurationChanged(Configuration newConfig);
如上仅仅为了当语言配置变化时,接收通知触发更新界面,后续如果需要获取正确的资源,请参考如下两种方式:
1. 使用Application Context 而不是Activity context, 获取对应字符串,更新UI
// Application context must be used to get correct string instead of activity context
// which won't update configuration when switch language.
String text = mContext.getApplicationContext().getString(R.string.local_storage_title);
这种方式仅仅适用于更新个别字符串资源显示,比较简单,这是由于切换语言,应用Application的Context所语言一定变化,但Activity的Context是否变化依赖于是否创建,如果设置不随语言变化,就不会变化。
2. 使用Activity context获取资源更新
Activity context获取字符串,当不随配置变化时,字符串是原来的语言;怎么才能获取正确的多语翻译,首先就需要更新Activity的configuration,然后再使用activity context获取资源就ok。
private void switchLanguage(Context context) { // context -activity
Resources resources = context.getResources();
Configuration config = resources.getConfiguration();
config.setLocales(LocaleList.getDefault());
resources.updateConfiguration(config, resources.getDisplayMetrics());
}
switchLanguage(mContext);
String text = mContext.getString(R.string.local_storage_title);