设置选项菜单项的标题

时间:2018-03-04 19:44:06

标签: android menu options

我正在为多种语言创建应用。除了选项菜单外,语言切换效果很好。

我在menu / main.xml中有这个:

<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
>

<item
    android:id="@+id/action_settings"
    android:orderInCategory="100"
    android:title="@string/action_settings"
    app:showAsAction="never" />

<item
    android:id="@+id/action_about"
    android:orderInCategory="100"
    android:title="@string/action_about"
    app:showAsAction="never" />

这导致我的meni项目始终具有相同的标题,即使我切换语言,因为它从XML中获取它。

现在我尝试用item.setTitle在我的MainActivity.java中以编程方式进行更改:

    @Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.

    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            Context context = LocaleHelper.setLocale(this, LocaleHelper.getLanguage(this));
            Resources resources = context.getResources();
            item.setTitle(resources.getString(R.string.action_settings));
            Intent i = new Intent(this,LanguageChange.class);
            this.startActivity(i);
            return true;
        case R.id.action_about:
            Context context = LocaleHelper.setLocale(this, LocaleHelper.getLanguage(this));
            Resources resources = context.getResources();
            item.setTitle(resources.getString(R.string.about_settings));
            Intent ix = new Intent(this,About.class);
            this.startActivity(ix);
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

问题是,菜单项的标题只有在我进入菜单并返回后才会改变。然后更改项目标题。但我需要立即改变它们。

3 个答案:

答案 0 :(得分:1)

更改onPrepareOptionsMenu(Menu menu)中的项目,如下所示:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem settings = menu.findItem(R.id.action_settings);
    // do smth with menu item
    return true;
}

答案 1 :(得分:0)

其他方式,您可以在切换语言后调用this.recreate();

答案 2 :(得分:0)

我认为标准和最好的方法是转换字符串资源并更改整个应用程序的区域设置