我希望能够通过编程的方式更改语言(应用程序的区域设置)。
对我来说最主要的问题是更新菜单标签。
我尝试了以下方法:
@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());
但是,由于我想要为每个活动控制旋转,它们从来没有完成。也许我做错了什么?