375 Stimmen

Wie kann ich ein Menüelement in der Aktionsleiste ausblenden?

Ich habe eine Aktionsleiste mit einem Menüpunkt. Wie kann ich diesen Menüpunkt aus-/einblenden?

Das ist es, was ich zu tun versuche:

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

24voto

hotzen Punkte 2700

Hat bei mir nicht funktioniert. Ich musste explizit verwenden onPrepareOptionsMenu um ein Element unsichtbar zu machen.

Verwenden Sie also onCreateOptionsMenu um das Menü zu erstellen und onPrepareOptionsMenu um die Sichtbarkeit zu ändern usw.

11voto

Akhila Punkte 141

Setzen Sie zunächst die Sichtbarkeit des Menüpunkts in der Menü-Layout-Datei wie folgt auf false :

<?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">
    <item
        android:visible="false"
        android:id="@+id/action_do_something"
        android:title="@string/txt_do_something"
        app:showAsAction="always|withText"
        android:icon="@drawable/ic_done"/>
</menu>

Sie können dann einfach die Sichtbarkeit des Menüeintrags in Ihrer onCreateOptionsMenu() nach dem Aufblasen des Menüs auf false setzen.

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    super.onCreateOptionsMenu(menu, inflater);
    inflater.inflate(menu,R.menu.menu);
    MenuItem item = menu.findItem(R.id.menuItemId);
    if (item != null){
        item.setVisible(false);
    }
}

10voto

mohamad sheikhi Punkte 342

Versuchen Sie dies:

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

9voto

Bala Vishnu Punkte 2540

Das hat bei mir sowohl bei Activity als auch bei Fragment funktioniert

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

8voto

Adriano Moutinho Punkte 533

Der beste Weg, um alle Einträge in einem Menü mit nur einem Befehl auszublenden, ist die Verwendung von "group" in Ihrer Menü-XML. Fügen Sie einfach alle Menüpunkte, die in Ihrem Überlaufmenü sein werden, in dieselbe Gruppe ein.

In diesem Beispiel haben wir zwei Menüpunkte, die immer angezeigt werden (normaler Punkt und Suche) und drei Überlaufpunkte:

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

    <item
        android:id="@+id/someItemNotToHide1"
        android:title="ITEM"
        app:showAsAction="always" />

    <item
        android:id="@+id/someItemNotToHide2"
        android:icon="@android:drawable/ic_menu_search"
        app:showAsAction="collapseActionView|ifRoom"
        app:actionViewClass="android.support.v7.widget.SearchView"
        android:title="Search"/>

    <group android:id="@+id/overFlowItemsToHide">
    <item android:id="@+id/someID" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID2" 
    android:orderInCategory="1" app:showAsAction="never" />
    <item android:id="@+id/someID3" 
    android:orderInCategory="1" app:showAsAction="never" />
    </group>
</menu>

Verwenden Sie dann in Ihrer Aktivität (vorzugsweise bei onCreateOptionsMenu) den Befehl setGroupVisible, um die Sichtbarkeit aller Menüelemente auf false oder true zu setzen.

public boolean onCreateOptionsMenu(Menu menu) {
   menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible
}

Wenn Sie diesen Befehl an anderer Stelle in Ihrer Aktivität verwenden möchten, müssen Sie die Menüklasse lokal speichern und immer prüfen, ob menu null ist, da Sie ihn vor createOptionsMenu ausführen können:

Menu menu;

public boolean onCreateOptionsMenu(Menu menu) {
       this.menu = menu;

}

public void hideMenus() {
       if (menu != null) menu.setGroupVisible(R.id.overFlowItems, false); // Or true to be visible       
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X