如何在Android中设置菜单的标题

时间:2013-10-27 10:38:47

标签: java android menu title

我正在尝试动态设置菜单的标题。

检索并设置它:

ItemView menuTitle = ((ItemView) findViewById(R.id.menu_filter));
menuTitle.setTitle("TITLE_HERE");

只要它在onOptionsItemSelected(MenuItem item)方法中就可以正常工作。

我无法找到从onPrepareOptionsMenuonCreateOptionsMenu方法设置此方法的方法,因为findViewById返回null(即使在菜单膨胀之后)。

奇怪的是,文档中似乎没有任何内容可以实现这一点,并且谷歌搜索对于这样一个看似简单的问题并没有太大的帮助。

5 个答案:

答案 0 :(得分:5)

我建议将活动中的引用保存到您在onCreateOptionsMenu中收到的Menu对象,然后使用它来检索需要在需要时进行更改的MenuItem。例如,您可以执行以下操作:

public class YourActivity extends Activity {

    private Menu menu;
    private String inMenuTitle = "Set to In";
    private String outMenuTitle = "Set to Out";
    private boolean flag = false;

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);

        // Create your menu...

        this.menu = menu;
        return true;
    }

    private void updateMenuTitles() {
        MenuItem menuItem = menu.findItem(R.id.bedSwitch);
        if (flag) {
            menuItem .setTitle(outMenuTitle);
        } else {
            menuItem .setTitle(inMenuTitle);
        }
    }

}

或者,您可以覆盖onPrepareOptionsMenu以在每次显示菜单时更新菜单项。

答案 1 :(得分:4)

我必须刚刚发现并且没有意识到有一个名为findItem的函数...

menu.findItem(R.id.MENU_TITLE).setTitle("MY TITLE");

答案 2 :(得分:1)

要动态设置菜单标题,您可以在onCreateOptionsMenu中执行此操作:

public boolean onCreateOptionsMenu(Menu menu) 
{
      menu.add(Menu.NONE, MyActivity.MENU_ID, 0, "Your Title").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM | MenuItem.SHOW_AS_ACTION_WITH_TEXT);
    return (true);
}

随着条件的变化(即标题需要更改),请致电

invalidateOptionsMenu();

在你的活动上,它将调用onCreateOptionsMenu并设置新标题。

答案 3 :(得分:1)

只需使用:

        getSupportActionBar().setTitle("YOUR TITLE HERE");

创建时内部,在初始化ui或视图绑定或数据绑定之后。​​

答案 4 :(得分:0)

我正在从onPrepareOptionMenu更改菜单标题,类似于以下代码。这是我片段中的代码,我认为这也应该适用于该活动。

 override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
    inflater.inflate(R.menu.menu_profile, menu)
    super.onCreateOptionsMenu(menu, inflater)
}

override fun onPrepareOptionsMenu(menu: Menu) {
    super.onPrepareOptionsMenu(menu)
    if (count == 1) {
        menu.findItem(R.id.screen_count).title = "1/3"
    } else {
        menu.findItem(R.id.screen_count).title = "xyz/3"
    }
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    when (item.itemId) {
        R.id.ic_edit -> {
            // handle click event here
        }
    }
    return super.onOptionsItemSelected(item)
}