Dodawanie działań i ich obsługa

Do paska aplikacji możesz dodawać przyciski działań użytkownika. Ta funkcja umożliwia umieszczenie najważniejszych działań w bieżącym kontekście u góry aplikacji. Na przykład u góry aplikacji do przeglądania zdjęć mogą znajdować się przyciski udostępniania i tworzenia albumu, gdy użytkownik przegląda rolkę zdjęć. Gdy użytkownik ogląda pojedyncze zdjęcie, mogą zobaczyć w aplikacji przyciski przycinania i filtrowania.

Ilość miejsca na pasku aplikacji jest ograniczona. Jeśli aplikacja zadeklaruje więcej działań, niż może się zmieścić na pasku aplikacji, pasek aplikacji wysyła te działania do rozszerzonego menu. Aplikacja może też określić, że działanie zawsze wyświetla się w rozszerzonym menu, a nie na pasku aplikacji.

Obraz przedstawiający Now w aplikacji na Androida z ikoną na pasku działań
Rysunek 1. Ikona działania w aplikacji „Now in Android”.

Dodaj przyciski poleceń

Wszystkie przyciski poleceń i inne elementy dostępne w menu rozszerzonym działania są zdefiniowane w zasobie menu XML. Aby dodać działania do paska działań, utwórz nowy plik XML w katalogu res/menu/ swojego projektu.

Dodaj element <item> dla każdego elementu, który chcesz umieścić na pasku działań, tak jak w tym przykładowym pliku XML menu:

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

Atrybut app:showAsAction określa, czy działanie jest wyświetlane jako przycisk na pasku aplikacji. Jeśli ustawisz app:showAsAction="ifRoom" (tak jak w przypadku ulubionego działania w przykładowym kodzie), będzie ono wyświetlane jako przycisk, o ile na pasku aplikacji jest na nie miejsce. Jeśli nie ma wystarczającej ilości miejsca, nadmiarowe działania są wysyłane do rozszerzonego menu. Jeśli ustawisz app:showAsAction="never" (tak jak w przypadku działania ustawień w przykładowym kodzie), działanie będzie zawsze widoczne w rozszerzonym menu i nie będzie wyświetlane na pasku aplikacji.

Jeśli działanie wyświetla się na pasku aplikacji, system używa ikony działania jako przycisku. Wiele przydatnych ikon znajdziesz w ikonach materiału.

Reaguj na działania

Gdy użytkownik wybierze jeden z elementów na pasku aplikacji, system wywoła metodę wywołania zwrotnego onOptionsItemSelected() Twojej aktywności i przekaże obiekt MenuItem, aby wskazać, który element został kliknięty. W swojej implementacji onOptionsItemSelected() wywołaj metodę MenuItem.getItemId(), aby określić, który element został kliknięty. Zwrócony identyfikator jest zgodny z wartością zadeklarowaną w atrybucie android:id odpowiedniego elementu <item>.

Na przykład ten fragment kodu sprawdza, które działanie wybierze użytkownik. Jeśli metoda nie rozpozna działania użytkownika, wywołuje metodę klasy nadrzędnej:

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

    }
}