Dodawanie działań i ich obsługa

Na pasku aplikacji możesz dodawać przyciski działań użytkownika. Ta funkcja pozwala umieścić najważniejsze działania w bieżącym kontekście u góry aplikacji. Na przykład aplikacja do przeglądania zdjęć może wyświetlać opcje udostępnianie i tworzenie albumu na górze, gdy użytkownik ogląda rolkę ze zdjęciami. Kiedy jeśli użytkownik ogląda pojedyncze zdjęcie, aplikacja może wyświetlić opcję przytnij, filtrów.

Miejsce na pasku aplikacji jest ograniczone. Jeśli aplikacja zadeklaruje więcej działań, niż może się zmieścić to pasek aplikacji wysyła nadmiarowe działania do rozszerzonego menu. Aplikacja może też określić, że działanie jest zawsze widoczne w rozszerzonym menu, zamiast na pasku aplikacji.

Ilustracja przedstawiająca Now w aplikacji na Androida z ikoną na pasku działań
Rysunek 1. Ikona działania na ekranie „Teraz w Androidzie” .
.
.

Dodaj przyciski poleceń

Wszystkie przyciski poleceń i inne elementy dostępne w rozszerzeniu działania są zdefiniowane w pliku XML zasobu menu. Aby dodać utwórz nowy plik XML w folderze Katalog res/menu/.

Dodaj <item> dla każdego elementu, który chcesz uwzględnić na pasku działań, jak widać na pasku ten przykładowy plik 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świetlany jako przycisk na pasku aplikacji. Jeśli ustawisz app:showAsAction="ifRoom" – tak jak w przykładowym kodzie działanie ulubione – działanie jest wyświetlane jako przycisk, o ile jest wolne miejsce. na pasku aplikacji. Jeśli nie ma wystarczającej ilości miejsca, nadmiarowe działania są wysyłane do rozszerzone menu. Jeśli ustawisz app:showAsAction="never", tak jak w działania settings w przykładowym kodzie – jest ono zawsze wymienione w sekcji rozszerzone menu i nie są wyświetlane na pasku aplikacji.

System użyje ikony działania jako przycisku polecenia, jeśli wyświetli się działanie na pasku aplikacji. Wiele przydatnych ikon znajdziesz w Ikony Material Design.

Reagowanie na działania

Gdy użytkownik wybierze jeden z elementów na pasku aplikacji, system wywoła aktywności onOptionsItemSelected() wywołania zwrotnego i przekazuje MenuItem obiekt co wskazuje, który element został kliknięty. W swojej implementacji onOptionsItemSelected(), wywołaj MenuItem.getItemId() aby określić, który element został kliknięty. Zwrócony identyfikator pasuje do wartości, zadeklaruj w odpowiednim elemencie <item> android:id.

Ten fragment kodu sprawdza na przykład, które działanie wybiera użytkownik. Jeśli metoda nie rozpoznaje działania użytkownika, wywołuje klasę nadrzędną :

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

    }
}