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();

528voto

K-ballo Punkte 79342

Erhalten Sie eine MenuItem auf ein solches Element verweist, rufen Sie setVisible um die Sichtbarkeit anzupassen, und rufen Sie dann invalidateOptionsMenu() auf Ihre Aktivität, damit das Menü der Aktionsleiste entsprechend angepasst wird.

Aktualisierung: A MenuItem ist keine normale Ansicht, die Teil Ihres Layouts ist. Es ist etwas Besonderes, etwas völlig anderes. Ihr Code gibt zurück null para item und das ist die Ursache für den Absturz. Was Sie stattdessen tun müssen, ist zu tun:

MenuItem item = menu.findItem(R.id.addAction);

Hier ist die Reihenfolge, in der Sie anrufen sollten: erster Aufruf invalidateOptionsMenu() und dann innen onCreateOptionsMenu(Menu) einen Verweis auf das MenuItem erhalten (durch Aufruf von menu.findItem() ) und rufen setVisible() darauf

183voto

P1r4nh4 Punkte 1957

Ich habe einen Nachtrag zu dieser Frage gefunden:

Wenn Sie die Sichtbarkeit Ihrer Menüeinträge unterwegs ändern möchten, müssen Sie nur eine Membervariable in Ihrer Aktivität setzen, um sich daran zu erinnern, dass Sie das Menü ausblenden möchten, und die invalidateOptionsMenu() und verstecken Sie die Elemente in Ihrem überschriebenen onCreateOptionsMenu(...) Methode.

//anywhere in your code
...
mState = HIDE_MENU; // setting state
invalidateOptionsMenu(); // now onCreateOptionsMenu(...) is called again
...

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    // inflate menu from xml
    MenuInflater inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.settings, menu);

    if (mState == HIDE_MENU)
    {
        for (int i = 0; i < menu.size(); i++)
            menu.getItem(i).setVisible(false);
    }
}

In meinem Beispiel habe ich alle Elemente ausgeblendet.

97voto

suhas_sm Punkte 2072

Ja.

  1. Sie können ein Kennzeichen/eine Bedingung setzen.
  2. Rufen Sie an. invalidateOptionsMenu() wenn Sie die Option ausblenden möchten. Dies führt zum Aufruf onCreateOptionsMenu() .
  3. En onCreateOptionsMenu() auf das Flag/die Bedingung prüfen und anzeigen oder auf folgende Weise ein- oder ausblenden:
MenuItem item = menu.findItem(R.id.menu_Done);

if (flag/condition)) {
  item.setVisible(false); 
} else { }

45voto

Suragch Punkte 420096

Ich habe nach einer Antwort mit etwas mehr Kontext gesucht. Jetzt, wo ich es herausgefunden habe, werde ich diese Antwort hinzufügen.

Schaltfläche im Menü xml standardmäßig ausblenden

Standardmäßig ist die Schaltfläche zum Teilen ausgeblendet, wie durch android:visible="false" .

enter image description here

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>

Schaltfläche im Code anzeigen

Die Schaltfläche "Teilen" kann jedoch optional in Abhängigkeit von einer Bedingung angezeigt werden.

enter image description here

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

Siehe auch

40voto

elias Punkte 14110

Sie können dies anrufen:

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

Aktualisierung:

Stellen Sie sicher, dass Ihr Code nicht null para item sonst kann es zum Absturz der Anwendung kommen.

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