перезагрузить представления после изменения локали в Android

Я хочу изменить локаль в своем приложении для Android, поэтому я использовал следующий код:

Locale locale = new Locale('fr'); // or whatever
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;

getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());

Но проблема в том, что в моих взглядах ничего не меняется. Как мне перезагрузить их, чтобы изменение локали стало видимым?

Редактировать: затрагиваются все представления: кнопки, текстовые представления, флажки. конечно, если я вручную устанавливаю текст для представления, то это работает, но я не хочу вызывать setText() для каждого виджета... Я знаю это, потому что имя пользователя отображается в представлении, и оно не обновлялось после выхода из системы. / войдите под другим пользователем. Поэтому я обновил текстовое представление вручную, но после того, как обнаружил, что проблема была одинаковой для всех представлений при изменении локали.


person Alexis    schedule 30.04.2012    source источник
comment
Во-первых, есть ли у вас переводы строк, которые вы используете?   -  person pandre    schedule 30.04.2012
comment
конечно у меня есть en, fr и nl в папках values-en, values-fr, values-nl   -  person Alexis    schedule 02.05.2012
comment
Можете ли вы указать типы затронутых представлений? Это TextView, EditText, CheckBox?   -  person pandre    schedule 02.05.2012


Ответы (2)


Я думаю, вы спрашиваете, как «перезагрузить» Activity, на котором вы находитесь, при смене локали.

Насколько я знаю, вам придется переразметить/пересоздать View или переустановить в них текст. Однако, если вы найдете лучшее решение, поделитесь им.

person pandre    schedule 02.05.2012
comment
наконец, я закрыл приложение, чтобы убедиться, что все представления перезагружаются после изменения локали. - person Alexis; 08.05.2012
comment
@jafar Как перезапуск вашего приложения решает ваши проблемы. Рассмотрим приложение с вкладками, в котором ваше предыдущее состояние может быть потеряно. - person Ganesh K; 12.06.2012
comment
@jafar, не могли бы вы объяснить, как вы решили эту проблему. Ответьте, пожалуйста. - person Abhijit Kurane; 03.09.2013

Хорошо, я нашел решение этой проблемы и хотел бы поделиться им.
добавьте это в свой манифест.

android:configChanges="locale"

и переопределите onConfigurationChanged() в своей деятельности

@Override
public void onConfigurationChanged(Configuration newConfig) {
  // refresh your views here
  super.onConfigurationChanged(newConfig);
}

перейдите здесь для получения дополнительной информации. Надеюсь, поможет. :)

person SMR    schedule 01.02.2014