我想改變語言(應用環境)編程。Android和菜單本土化
對我來說,主要問題是更新菜單標籤。
我嘗試以下方法:
@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文件中,所以我不想複製代碼。任何人有想法?
關注到第一個答案:我HAE用下面的代碼地區被改爲:
Locale locale = new Locale((String)newValue);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getApplication().getResources().updateConfiguration(config, getApplication().getResources().getDisplayMetrics());
但我想控制每個活動旋轉,它們永遠不會結束。也許我做錯了什麼?
我做到了。 (我的意思是values-xx/string.xml和values/string.xml)。你的意思是創建menu-xx/mymenu.xml嗎? – davs 2010-08-03 05:26:16
因此,您使用字符串menu_about爲字符串,menu_about和values-yy/string.xml創建了values-xx/string.xml。您將手機的語言環境設置爲yy,並且字符串值不會更改爲yy?你正在測試哪個區域? http://developer.android.com/guide/topics/resources/providing-resources.html#BestMatch談論它如何決定使用哪個值,您可能沒有正確配置您的區域設置。 – 2010-08-03 15:45:20
我正在使用en/ru語言環境進行測試。但由於我沒有銷燬活動,菜單沒有更新。所以,我決定清除菜單並從零開始創建它 – davs 2010-08-03 16:06:44