Я хотел бы изменить язык (язык приложения) программно.
Основная проблема для меня - это обновление меток меню.
Я попробовал следующий метод:
@Override
public boolean onMenuOpened(int featureId, Menu menu) {
if (shouldChangeMenuLabels) {
for (int i = 0; i < menu.size(); i++) {
MenuItem menuItem = menu.getItem(i);
switch (menuItem.getItemId()) {
case R.id.menu_main_about:
menuItem.setTitle(R.string.menu_about);
break;
case R.id.menu_main_preferences:
menuItem.setTitle(R.string.menu_prefs);
break;
}
}
shouldChangeMenuLabels = false;
}
Но я уверен, что это плохая идея.Я хочу избежать использования оператора switch-case, так как это не универсальный метод (я не могу просто перенести отсканированный код на другие действия / я не могу создать абстрактный класс, который бы это делал).
Кстати, все меню описаны в файлах menu / *. Xml, поэтому я не хочу дублировать код.У кого-нибудь есть идеи?
Относительно первого ответа: я изменил локаль с помощью следующего кода:
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
Но так как я хочу контролировать вращение для каждого действия, они никогда не заканчиваются.Может я что-то не так сделал?