我正在使用以下代码在我的应用程序中设置特定的语言。语言保存在应用程序内的
SharedPreferences
中。在API级别23之前,它可以完美地工作。在Android N中,SharedPreferences
也能正常工作,它返回正确的语言代码字符串,但它不会更改区域设置(设置手机的默认语言)。可能出了什么问题?
更新1:当我在res.updateConfiguration(config, dm)
之后立即使用Log.v("MyLog", config.locale.toString());
时,它返回正确的区域设置,但应用程序的语言没有改变。
更新2:我还提到,如果我更改区域设置,然后重新启动活动(使用新意图并完成旧的),它会正确地更改语言,甚至在旋转后显示正确的语言。但是,当我关闭应用程序并再次打开它时,我会得到默认语言。这很奇怪。public class ActivityMain extends AppCompatActivity {
//...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Set locale
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
String lang = pref.getString(ActivityMain.LANGUAGE_SAVED, "no_language");
if (!lang.equals("no_language")) {
Resources res = context.getResources();
Locale locale = new Locale(lang);
Locale.setDefault(locale);
DisplayMetrics dm = res.getDisplayMetrics();
Configuration config = res.getConfiguration();
if (Build.VERSION.SDK_INT >= 17) {
config.setLocale(locale);
} else {
config.locale = locale;
}
}
res.updateConfiguration(config, dm);
setContentView(R.layout.activity_main);
//...
}
//...
}