我有一个带有菜单项的操作栏。如何隐藏/显示菜单项?

这就是我想做的:

MenuItem item = (MenuItem) findViewById(R.id.addAction);
item.setVisible(false);
this.invalidateOptionsMenu();

当前回答

试试这个:

MenuItem myitem = menu.findItem(R.id.my_item);
myitem.setVisible(false);

其他回答

我在寻找一个更有背景的答案。现在我已经弄清楚了,我将添加这个答案。

在菜单xml中默认隐藏按钮

默认情况下,共享按钮将被隐藏,由android:visible="false"设置。

main_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <!-- hide share button by default -->
    <item
        android:id="@+id/menu_action_share"
        android:icon="@drawable/ic_share_white_24dp"
        android:visible="false"     
        android:title="Share"
        app:showAsAction="always"/>

    <item
        android:id="@+id/menu_action_settings"
        android:icon="@drawable/ic_settings_white_24dp"
        android:title="Setting"
        app:showAsAction="ifRoom"/>

</menu>

代码中显示按钮

但是可以根据某些条件选择显示共享按钮。

MainActivity.java

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    MenuItem shareItem = menu.findItem(R.id.menu_action_share);

    // show the button when some condition is true
    if (someCondition) {        
        shareItem.setVisible(true);
    }

    return true;
}

另请参阅

设置应用程序栏(Android文档帮助设置应用程序/操作栏)

是的。

您可以设置标志/条件。 当您想隐藏选项时,调用invalidateOptionsMenu()。这会调用onCreateOptionsMenu()。 在onCreateOptionsMenu()中,检查标志/条件并显示或 隐藏方法如下:

MenuItem item = menu.findItem(R.id.menu_Done); If (flag/condition)) { item.setVisible(假); } else {}

如果您按照上述答案执行了所有操作,但仍然可以看到菜单项,请检查您是否引用了唯一的资源。 例如,在onCreateOptionsMenu或onPrepareOptionsMenu

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem menuOpen = menu.findItem(R.id.menu_open);
    menuOpen.setVisible(false);
}

Ctrl +单击R.id。Menu_open并检查它是否只存在于一个菜单文件中。如果这个资源已经在任何地方使用并加载在一个活动中,它将尝试隐藏在那里。

这在《Activity》和《Fragment》中都很奏效

@Override
public void onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    if (menu.findItem(R.id.action_messages) != null)
        menu.findItem(R.id.action_messages).setVisible(false);
}

你可以使用toolbar.getMenu().clear();一次隐藏所有菜单项