Dodawanie działań i ich obsługa

Wypróbuj metodę Compose
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodawać komponenty w Compose.

Na pasku aplikacji możesz dodawać przyciski działań użytkownika. Ta funkcja umożliwia umieszczanie najważniejszych działań w bieżącym kontekście na górze aplikacji. Na przykład aplikacja do przeglądania zdjęć może wyświetlać przyciski udostępnianiatworzenia albumu u góry, gdy użytkownik przegląda rolkę ze zdjęciami. Gdy użytkownik przegląda pojedyncze zdjęcie, aplikacja może wyświetlać przyciski przycinaniafiltrowania.

Miejsce na pasku aplikacji jest ograniczone. Jeśli aplikacja deklaruje więcej działań, niż mieści się na pasku aplikacji, pasek aplikacji wysyła nadmiarowe działania do menu przepełnienia. Aplikacja może też określić, że działanie ma być zawsze widoczne w rozszerzonym menu, a nie na pasku aplikacji.

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

Dodawanie przycisków działań

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

Dodaj element <item> dla każdego elementu, który chcesz umieścić na pasku działań, jak pokazano 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 wartość app:showAsAction="ifRoom", tak jak w przykładzie kodu w przypadku działania favorite, działanie będzie wyświetlane jako przycisk, jeśli na pasku aplikacji będzie na niego miejsce. Jeśli nie ma wystarczająco dużo miejsca, nadmiarowe działania są wysyłane do rozszerzonego menu. Jeśli ustawisz app:showAsAction="never", tak jak w przypadku działania settings w przykładzie kodu, działanie będzie zawsze wyświetlane w rozszerzonym menu, a nie na pasku aplikacji.

Jeśli działanie jest wyświetlane na pasku aplikacji, system używa ikony działania jako przycisku polecenia. Wiele przydatnych ikon znajdziesz w Material Icons.

Odpowiadanie na działania

Gdy użytkownik wybierze jeden z elementów paska aplikacji, system wywoła metodę wywołania zwrotnego onOptionsItemSelected() aktywności i przekaże obiekt MenuItem wskazujący, który element został kliknięty. W 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 odpowiednim elemencie <item> w atrybucie android:id.

Na przykład ten fragment kodu sprawdza, jakie działanie wybiera użytkownik. Jeśli metoda nie rozpoznaje 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);

    }
}