Aktionen hinzufügen und verarbeiten

In die App-Leiste können Sie Schaltflächen für Nutzeraktionen einfügen. Mit dieser Funktion können Sie die wichtigsten Aktionen für den aktuellen Kontext oben in der App platzieren. In einer Fotosuch-App könnten beispielsweise oben die Schaltflächen Teilen und Album erstellen angezeigt werden, wenn der Nutzer seine Fotos ansieht. Wenn sich der Nutzer ein einzelnes Foto ansieht, werden in der App möglicherweise die Schaltflächen Zuschneiden und Filtern angezeigt.

Der Platz in der App-Leiste ist begrenzt. Wenn eine App mehr Aktionen deklariert, als in die App-Leiste passen, sendet die App-Leiste die überzähligen Aktionen an ein Dreipunkt-Menü. Die Anwendung kann auch festlegen, dass eine Aktion immer im Dreipunkt-Menü und nicht in der App-Leiste angezeigt wird.

Ein Bild, das die App „Now in Android“ mit einem Aktionsleistensymbol zeigt
Abbildung 1: Ein Aktionssymbol in der App „Now in Android“.

Aktionsschaltflächen hinzufügen

Alle Aktionsschaltflächen und anderen im Aktionsüberlauf verfügbaren Elemente werden in einer XML-Menüressource definiert. Wenn Sie der Aktionsleiste Aktionen hinzufügen möchten, erstellen Sie eine neue XML-Datei im Verzeichnis res/menu/ Ihres Projekts.

Fügen Sie für jedes Element, das Sie in die Aktionsleiste aufnehmen möchten, ein <item>-Element ein, wie in der folgenden Beispiel-Menü-XML-Datei gezeigt:

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

    <!-- "Mark Favorite", must appear as action button if possible. -->
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/ic_favorite_black_48dp"
        android:title="@string/action_favorite"
        app:showAsAction="ifRoom"/>

    <!-- Settings, must always be in the overflow. -->
    <item android:id="@+id/action_settings"
          android:title="@string/action_settings"
          app:showAsAction="never"/>

</menu>

Das Attribut app:showAsAction gibt an, ob die Aktion als Schaltfläche in der App-Leiste angezeigt wird. Wenn Sie app:showAsAction="ifRoom" festlegen (z. B. in der Aktion Favoriten im Beispielcode), wird die Aktion als Schaltfläche angezeigt, wenn in der App-Leiste Platz dafür ist. Wenn nicht genügend Platz vorhanden ist, werden zusätzliche Aktionen an das Dreipunkt-Menü gesendet. Wenn Sie app:showAsAction="never" festlegen, wie in der Aktion settings im Beispielcode, wird die Aktion immer im Dreipunkt-Menü aufgeführt und nicht in der App-Leiste angezeigt.

Das System verwendet das Aktionssymbol als Aktionsschaltfläche, wenn die Aktion in der App-Leiste angezeigt wird. Viele nützliche Symbole finden Sie unter Materialsymbole.

Auf Aktionen reagieren

Wenn der Nutzer eines der Elemente in der App-Leiste auswählt, ruft das System die Callback-Methode onOptionsItemSelected() der Aktivität auf und übergibt ein MenuItem-Objekt, um anzugeben, auf welches Element geklickt wurde. Rufen Sie in der Implementierung von onOptionsItemSelected() die Methode MenuItem.getItemId() auf, um festzustellen, auf welches Element getippt wurde. Die zurückgegebene ID stimmt mit dem Wert überein, den Sie im Attribut android:id des entsprechenden <item>-Elements angeben.

Das folgende Code-Snippet prüft beispielsweise, welche Aktion der Nutzer auswählt. Wenn die Methode die Aktion des Nutzers nicht erkennt, ruft sie die Methode der übergeordneten Klasse auf:

Kotlin

override fun onOptionsItemSelected(item: MenuItem) = when (item.itemId) {
    R.id.action_settings -> {
        // User chooses the "Settings" item. Show the app settings UI.
        true
    }

    R.id.action_favorite -> {
        // User chooses the "Favorite" action. Mark the current item as a
        // favorite.
        true
    }

    else -> {
        // The user's action isn't recognized.
        // Invoke the superclass to handle it.
        super.onOptionsItemSelected(item)
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_settings:
            // User chooses the "Settings" item. Show the app settings UI.
            return true;

        case R.id.action_favorite:
            // User chooses the "Favorite" action. Mark the current item as a
            // favorite.
            return true;

        default:
            // The user's action isn't recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);

    }
}