Android 安卓&;菜单本地化

Android 安卓&;菜单本地化,android,localization,menu,Android,Localization,Menu,我想以编程方式更改语言(应用程序的区域设置) 我的主要问题是更新菜单标签 我尝试了以下方法: @Override public boolean onMenuOpened(int featureId, Menu menu) { if (shouldChangeMenuLabels) { for (int i = 0; i < menu.size(); i++) { MenuItem menuItem = menu.getItem(i);

我想以编程方式更改语言(应用程序的区域设置)

我的主要问题是更新菜单标签

我尝试了以下方法:

 @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;
    }

但由于我想控制每个活动的旋转,它们永远不会完成。可能是我做错了什么?

你有没有仔细阅读有关的文档?通常,您会为要支持的每种语言/区域设置创建不同的字符串文件。在menu.xml文件中,您可以引用字符串id,并根据当前区域设置选择适当的值

menu.add(0,menu_ABOUT,0,_mContext.getResources().getString(R.string.mymenu)).setIcon(R.drawable.ic_menu)


创建菜单时,插入字符串并将其本地化。

我不知道这是个好主意,但我发现了以下方法:

 @Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if (shouldChangeLocale) {
        menu.clear();
        MenuInflater inflater = getMenuInflater(); // -->onCreateMenu (Menu) 
        inflater.inflate(R.menu.menu_main, menu);  // /
        shouldChangeLocale=false;
    }

    return super.onMenuOpened(featureId, menu);
}

我需要你的建议,我应该这样做吗?

我做到了。(我指的是值xx/string.xml和值/string.xml)。您的意思是创建menu xx/mymenu.xml吗?因此,您有值xx/string.xml和字符串menu_about,以及值yy/string.xml和字符串menu_about。您将手机的语言环境设置为yy,并且字符串值不会更改为yy?您正在使用哪些地区进行测试?讨论如何决定使用哪个值,您可能没有正确配置语言环境。我正在使用en/ru语言环境进行测试。但由于我并没有破坏活动,所以菜单并没有更新。所以,我决定清除菜单并从scratchAh创建它,好吧,所以如果你完全退出活动并返回,那么它是正确的,但是你想让它在坐着的时候更新吗?听起来你的系统在区域设置改变时刷新菜单是有意义的。我有一个带有菜单和首选项页面的主屏幕。在“首选项”页面上,我可以选择更改区域设置。我发布的更改区域设置的片段引起了质疑。生命周期:使用相应的区域设置-->打开首选项屏幕启动主屏幕(但主屏幕尚未完成)-->更改区域设置-->返回到未完成的主屏幕(方法onResume调用主屏幕)。我需要刷新菜单,如果它需要的话,因为我知道菜单只为每个活动创建一个,因为它的生命周期。我对本地化没有任何问题,因为。。创建菜单时我遇到问题,然后我更改了应用程序的区域设置,我想重新加载菜单(可能会销毁它并再次创建。但我不知道如何销毁它)。如果(preferences.getBoolean(“Sound”,true)){menu.add,您可以使用共享首选项并在菜单项的每个选择上更改它(0,MENU_SOUND,0,“SOUND”).setIcon(R.drawable.on);}else{MENU.add(0,MENU_SOUND,0,“SOUND”).setIcon(R.drawable.off);}我不想以我认为不好的方式创建菜单
 @Override
public boolean onMenuOpened(int featureId, Menu menu) {
    if (shouldChangeLocale) {
        menu.clear();
        MenuInflater inflater = getMenuInflater(); // -->onCreateMenu (Menu) 
        inflater.inflate(R.menu.menu_main, menu);  // /
        shouldChangeLocale=false;
    }

    return super.onMenuOpened(featureId, menu);
}