Dodawanie działań i ich obsługa

Wypróbuj tworzenie wiadomości
Jetpack Compose to zalecany zestaw narzędzi interfejsu na Androida. Dowiedz się, jak dodawać komponenty w sekcji Tworzenie.

Pasek aplikacji umożliwia dodawanie przycisków działań użytkownika. Ta funkcja umożliwia umieszczanie najważniejszych czynności dotyczących bieżącego kontekstu u góry aplikacji. Na przykład aplikacja do przeglądania zdjęć może wyświetlać u góry przyciski udostępnijutwórz album, gdy użytkownik przegląda zdjęcia. Gdy użytkownik ogląda pojedyncze zdjęcie, aplikacja może wyświetlić przyciski przycinaniafiltrów.

Liczba miejsc na pasku aplikacji jest ograniczona. 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 zawsze będzie wyświetlane w rozszerzonym menu, a nie na pasku aplikacji.

Obraz pokazujący aplikację Now na Androidzie z ikoną paska działań
Rysunek 1. Ikona działania w aplikacji „Nowości w Androidzie”.

Dodawanie przycisków działań

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

Dodaj element <item> do każdego elementu, który chcesz uwzględnić na pasku czynności, 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 parametr app:showAsAction="ifRoom", tak jak w działaniu ulubione w przykładowym kodzie, to działanie będzie widoczne jako przycisk, jeśli znajdzie się na pasku aplikacji miejsce na nie. Jeśli nie ma wystarczająco dużo miejsca, nadmiar działań jest wysyłany do menu przepełnienia. Jeśli ustawisz app:showAsAction="never", tak jak w działaniu settings w przykładowym kodzie, działanie będzie zawsze widoczne 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 działania. Wiele przydatnych ikon znajdziesz w Material Icons.

Odpowiadanie na działania

Gdy użytkownik wybierze jeden z elementów na pasku aplikacji, system wywołuje metodę wywołania onOptionsItemSelected() w Twojej aktywności i przekazuje obiekt MenuItem, aby wskazać, który element został kliknięty. W implementacji funkcji onOptionsItemSelected() wywołaj metodę MenuItem.getItemId(), aby określić, który element został kliknięty. Zwracany identyfikator jest zgodny z wartością deklarowaną w odpowiednim atrybucie elementu <item> android:id.

Na przykład ten fragment kodu sprawdza, jakie 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);

    }
}