In der 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 App zum Durchsuchen von Fotos werden beispielsweise die Schaltflächen Teilen und Album erstellen oben angezeigt, wenn der Nutzer sich 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, werden die zusätzlichen Aktionen in ein Überlaufmenü verschoben. Die App kann auch festlegen, dass eine Aktion immer im Dreipunkt-Menü angezeigt wird, anstatt in der App-Leiste.
Aktionsschaltflächen hinzufügen
Alle Aktionsschaltflächen und anderen Elemente, die im Aktionsüberlauf 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 jedes Element, das in der Aktionsleiste angezeigt werden soll, ein <item>-Element hinzu, wie im folgenden Beispiel für eine 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, wie in der favorite-Aktion des Beispielcodes, wird die Aktion als Schaltfläche angezeigt, sofern in der App-Leiste dafür Platz ist. Wenn nicht genügend Platz vorhanden ist, werden überschüssige Aktionen in das Überlaufmenü verschoben. Wenn Sie app:showAsAction="never" festlegen, wie in der settings-Aktion des Beispielcodes, wird die Aktion immer im Dreipunkt-Menü aufgeführt und nicht in der App-Leiste angezeigt.
Das System verwendet das Symbol der Aktion als Aktionsbutton, 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-Leistenelemente auswählt, ruft das System die Callback-Methode onOptionsItemSelected() der 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, auf welches Element getippt wurde. Die zurückgegebene ID entspricht dem Wert, den Sie im android:id-Attribut des entsprechenden <item>-Elements deklarieren.
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 Superklassenmethode 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); } }