Есть ли способ изменить Locale
в Android
приложении только для текущего Activity
?
У меня есть form
в Activity
, и я хотел бы добавить опцию для Пользователь выбирает, на каком языке он хочет заполнить форму. Так что будет возможность выбрать язык внутри того же упражнения.
Эта опция должна быть доступна в любое время, и при выборе нового языка информация формы должна сохраняться. Чтобы это можно было сделать во время заполнения формы.
Locale locale = new Locale("fi");
Locale.setDefault(locale);
Configuration config = context.getResources().getConfiguration();
config.locale = locale;
context.getResources().updateConfiguration(config,
context.getResources().getDisplayMetrics());
Я наткнулся на это решение, которое изменяет весь язык приложения, но не изменяется в пределах текущего Activity
, пока вы не перезагрузите его. И при перезагрузке действия, form data
теряется.
Полагаю, я мог бы сохранить информацию о форме внутри Bundle
, а затем перезагрузить ее, когда будет выбран новый язык, но есть ли лучший способ сделать это?
EDIT
Я отображаю form
в Controller
, поэтому изменяю Locale
, а затем recreating
действие на самом деле не вариант, так как экран будет пустым в течение 1-2 секунд. ,
Есть ли лучший способ сделать это? Может быть, есть способ перезагрузить только текстовые поля?
Есть одна идея, о которой я мог подумать: переопределение всех текстовых полей при изменении языка в приложении, но действительно ли это хорошее решение?
@OnClick(R.id.btnLocaleEng)
public void onLocaleChangedEng(){
Locale english = new Locale("en", "US");
Resources resources = getLocalizedResources(context, english);
title.setText(resources.getString(R.string.title));
...
}
@OnClick(R.id.btnLocaleFi)
public void onLocaleChangedFi(){
Locale english = new Locale("fi", "FI");
Resources resources = getLocalizedResources(context, english);
title.setText(resources.getString(R.string.title));
...
}
@NonNull
public Resources getLocalizedResources(Context context, Locale desiredLocale) {
Configuration conf = context.getResources().getConfiguration();
conf = new Configuration(conf);
conf.setLocale(desiredLocale);
Context localizedContext = context.createConfigurationContext(conf);
return localizedContext.getResources();
}
По сути дела, и так как у меня есть еще 30 полей, мне нужно будет сделать их все по одному. Трудно поверить, что другого выхода нет.