В моем приложении для Android у меня есть действие предпочтений, которое позволяет пользователю переопределять язык приложения. Для этого я вызываю эту функцию в каждом действии onResume (), а затем сбрасываю представление содержимого:
public static void checkOverrideSystemLanguage(Context context) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(context);
// Check if system's language setting needs to be overridden
boolean overrideSystemLanguage = prefs.getBoolean(context
.getString(R.string.pref_key_chkbx_override_system_language),
false);
if (overrideSystemLanguage) {
// Get language selection and possible languages
String localeString = prefs.getString(
context.getString(R.string.pref_key_list_languages), "");
List<String> possibleLanguages = Arrays.asList(context
.getResources().getStringArray(
R.array.pref_values_list_languages));
if (possibleLanguages.contains(localeString)) {
// Change language setting in configuration
Locale locale = new Locale(localeString);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
}
// Use default language
else {
overrideSystemLanguage = false;
}
}
// Use default language
if (!overrideSystemLanguage) {
context.getResources().updateConfiguration(
Resources.getSystem().getConfiguration(),
context.getResources().getDisplayMetrics());
}
}
В каждом действии она отлично работает. Однако в действии предпочтений, когда пользователь меняет язык, он не обновляется сразу, потому что нет метода setContentView (). Пользователь должен вернуться к предыдущему действию и снова запустить действие с настройками, чтобы увидеть, как отразилось изменение языка.
Я пробовал следующее в прослушивателе onPreferenceChange ():
Обновление конфигурации, удаление и чтение настроек:
checkOverrideSystemLanguage (this);
// Удаляем все настройки и добавляем их для обновления языка
getPreferenceScreen (). RemoveAll ();
addPreferencesFromResource (R.xml.preferences);
Обновление конфигурации и вызов onCreate (null)
Завершение и перезапуск действия
finish ();
startActivity (new Intent (this, PreferencesActivity.class));
Спасибо за вашу помощь!