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

这就是我想做的:

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

当前回答

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

在菜单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文档帮助设置应用程序/操作栏)

其他回答

我认为更好的方法是为菜单使用成员变量,在onCreateOptionsMenu()中初始化它,然后只使用setVisible(),而不使选项菜单无效。

如果您按照上述答案执行了所有操作,但仍然可以看到菜单项,请检查您是否引用了唯一的资源。 例如,在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并检查它是否只存在于一个菜单文件中。如果这个资源已经在任何地方使用并加载在一个活动中,它将尝试隐藏在那里。

是的。

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

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

这个代码对我有用

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_menu,menu);
    if (Application.sharedPreferences.getInt("type",1) == 2)
    {
        menuItem = menu.findItem(R.id.menu_travel_orders);
        menuItem.setVisible(false);
    }
    return super.onCreateOptionsMenu(menu);
}

试试这个:

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