我有preferenceFragment
PreferenceList
,其中用户为应用用户界面选择新语言。
我希望刷新所有资源并使用新语言重新加载。 (就好像使用新选择的语言重新启动应用程序一样)
正如我所读到的那样,默认情况下configurationChanged
应重新启动Activity
或正在运行的任何内容,但似乎不会发生。 (我在包含Toast
的活动的onCreate
中添加了preferenceFragment
,并且在配置更改时不会调用它。
以下是preferenceFragment
:
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
if (getString(R.string.shared_options_select_language_key).equals(key)) {
Toolkit.setApplicationLanguage(getActivity(), getActivity().getBaseContext());
}
以下是setApplicationLanguage()
的代码:
public static void setApplicationLanguage(Context ctx, Context baseCtx) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ctx);
String langKey = ctx.getString(R.string.shared_options_select_language_key);
String langDefault = ctx.getString(R.string.shared_options_select_language_default_value);
String appLanguage = preferences.getString(langKey, langDefault);
Locale locale = null;
if (appLanguage.equals(langDefault)) {
locale = new Locale(Resources.getSystem().getConfiguration().locale.getLanguage());
} else {
String[] languageInfo = appLanguage.split("_");
if (languageInfo.length > 1) {
locale = new Locale(languageInfo[0], languageInfo[1]);
} else {
locale = new Locale(appLanguage);
}
}
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
baseCtx.getResources().updateConfiguration(config, baseCtx.getResources().getDisplayMetrics());
}