У меня есть многоязычное приложение для Android. Мне нужно установить другой язык, чем у пользователя в настройках устройства. Когда мое приложение запускается, пользователь выбирает предпочитаемый язык. На Android 7 и ниже я использую updateconfiguration в своем классе приложения. Но это решение не работает на Android 8. Я пытаюсь использовать конфигурацию обновления в attachBaseContext в каждом действии, но безуспешно.
Изменить язык программно в Android
Ответы (2)
@codespy имеет правильную идею, но для более подробной информации:
У меня была точно такая же проблема в моем приложении. Сначала я думал, что проблема заключается в использовании этого устаревшего метода установки пользовательского языка:
Locale.setDefault(newLocale);
Configuration config = new Configuration();
// TODO fix deprecation issues
config.locale = newLocale;
getResources().updateConfiguration(config, getResources().getDisplayMetrics());
И поэтому я попытался использовать createConfigurationContext с помощью этого ответа, но это тоже не сработало ( и, кроме того, было намного сложнее с несколькими подводными камнями).
После обширной отладки я кое-что заметил:
MyAdapter adapter = new MyAdapter(getApplicationContext(), list);
По наитию я заменил getApplicationContext()
на getContext()
, и внезапно в моем списке элементов использовался правильный язык.
Оказывается, getApplicationContext()
Oreo больше не учитывает установленную вами пользовательскую локаль. Вместо этого вы должны использовать контекст действия.
(Обратите внимание: я знаю, что не должен был использовать для этого контекст приложения, но это устаревшее приложение со многими такими проблемами. Их исправление — моя постоянная ежедневная борьба.)
Пожалуйста, используйте activity.getResource() и используйте этот объект Resource. В моем случае это помощь.