Aktionen hinzufügen und verarbeiten

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Weitere Informationen zum Hinzufügen von Komponenten in Compose

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

Der Platz in der App-Leiste ist begrenzt. Wenn eine App mehr Aktionen angibt, als in die App-Leiste passen, werden die zusätzlichen Aktionen in ein Overflow-Menü gesendet. Die App kann auch angeben, dass eine Aktion immer im Dreipunkt-Menü angezeigt wird, anstatt in der App-Leiste.

Ein Bild, das die Google Now App auf einem Android-Gerät mit einem Symbol für die Aktionsleiste zeigt
Abbildung 1. Ein Aktionssymbol in der App „Jetzt bei Android“.

Aktionsschaltflächen hinzufügen

Alle Aktionsschaltflächen und anderen Elemente, die im Drop-down-Menü für Aktionen verfügbar sind, 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 jeden Artikel, den Sie in die Aktionsleiste aufnehmen möchten, ein <item>-Element hinzu, wie in der folgenden Beispiel-XML-Datei für ein Menü zu sehen:

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

Mit dem app:showAsAction-Attribut wird angegeben, ob die Aktion als Schaltfläche in der App-Leiste angezeigt wird. Wenn Sie app:showAsAction="ifRoom" festlegen, wird die Aktion als Schaltfläche angezeigt, sofern in der App-Leiste genügend Platz dafür vorhanden ist. Das ist beispielsweise bei der Favoriten-Aktion im Beispielcode der Fall. Wenn nicht genügend Platz vorhanden ist, werden überzählige Aktionen an das Überlaufmenü 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 Symbol der Aktion als Aktionsschaltfläche, wenn die Aktion in der App-Leiste angezeigt wird. Viele nützliche Symbole finden Sie unter Material Icons.

Auf Aktionen reagieren

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

Im folgenden Code-Snippet wird beispielsweise geprüft, welche Aktion der Nutzer auswählt. Wenn die Methode die Aktion des Nutzers nicht erkennt, wird die Methode der Superklasse aufgerufen:

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

    }
}