Korzystanie z widoków działań i dostawców działań

Biblioteka AndroidX Toolbar oferuje na różne sposoby interakcji użytkowników z aplikacją. Artykuł Dodawanie i obsługa działań zawiera informacje o tym, zdefiniować działanie, które może być przyciskiem lub elementem menu. W tym dokumencie opisujemy, jak dodawać dwa uniwersalne komponenty:

  • Widok czynności to działanie, które udostępnia wiele funkcji na pasku aplikacji. Dla: Przykład: widok działań związanych z wyszukiwaniem pozwala użytkownikowi wpisywać wyszukiwany tekst na pasku aplikacji bez potrzeby aby zmienić działania lub fragmenty.
  • Dostawca działań to działanie o własnym niestandardowym układzie. Działanie początkowe wyświetla się jako przycisk lub pozycja menu; gdy użytkownik kliknie działanie, dostawca działania ma kontrolę nad tym, zachowanie akcji w dowolny sposób. Dostawca działania może na przykład odpowiedzieć na kliknij, aby wyświetlić menu.

AndroidX udostępnia kilka wyspecjalizowanych widżetów działań i widżetów ich dostawcy. Na przykład parametr SearchView widżet implementuje widok działań do wpisywania zapytań. ShareActionProvider implementuje dostawcę działań umożliwiających udostępnianie informacji innym aplikacjom. Możesz także określić własnych widoków działań i dostawców działań.

Dodaj widok działania

Aby dodać widok działań, utwórz <item> w zasobie menu paska narzędzi, jak opisano w Dodawanie i obsługa działań. Dodaj jeden z tych atrybutów do Element <item>:

  • actionViewClass: klasa widżetu, który implementuje działanie
  • actionLayout: zasób układu opisujący komponenty działania

Ustaw atrybut showAsAction na "ifRoom|collapseActionView" lub "never|collapseActionView" Flaga collapseActionView wskazuje, jak wyświetlają widżet, gdy użytkownik nie wchodzi z nim w interakcję. Jeśli widżet znajduje się na pasku aplikacji, wyświetla widżet jako ikonę. Jeśli widżet jest w rozszerzonym menu, aplikacja wyświetla go. jako pozycję menu. Gdy użytkownik wejdzie w interakcję z widokiem działania, rozwija się, aby wypełnić pasek aplikacji.

Na przykład ten kod dodaje do paska aplikacji widżet SearchView:

<item android:id="@+id/action_search"
     android:title="@string/action_search"
     android:icon="@drawable/ic_search"
     app:showAsAction="ifRoom|collapseActionView"
     app:actionViewClass="androidx.appcompat.widget.SearchView" />

Jeśli użytkownik nie wchodzi w interakcję z widżetem, aplikacja wyświetla widżet jako określoną ikonę. do android:icon. Jeśli na pasku aplikacji nie ma już miejsca, aplikacja doda działanie do rozszerzone menu.

Obraz przedstawiający pasek wyszukiwania z ikonami na początku i na końcu.
Rysunek 1. Pasek wyszukiwania z ikonami na początku i na końcu.

Gdy użytkownik kliknie ikonę lub pozycję menu, widżet rozwinie się i wypełni pasek narzędzi, wchodzenia z nim w interakcję.

Obraz przedstawiający otwarty widok wyszukiwania po zaznaczeniu paska wyszukiwania.
Rysunek 2. Widok wyszukiwania otwiera się po zaznaczeniu paska wyszukiwania.

Jeśli musisz skonfigurować działanie, przejdź do sekcji aktywności onCreateOptionsMenu() oddzwanianie. Odwołanie do widoku działania możesz uzyskać, wywołując metodę getActionView() . Na przykład ten kod pobiera odwołanie do obiektu SearchView widżet zdefiniowany w poprzednim przykładzie kodu:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.main_activity_actions, menu)

    val searchItem = menu?.findItem(R.id.action_search)
    val searchView = searchItem?.actionView as SearchView

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu)
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.main_activity_actions, menu);

    MenuItem searchItem = menu.findItem(R.id.action_search);
    SearchView searchView =
            (SearchView) searchItem.getActionView();

    // Configure the search info and add any event listeners.

    return super.onCreateOptionsMenu(menu);
}

Reagowanie na rozwinięcie widoku działania

Jeśli element <item> działania ma flagę collapseActionView, parametr wyświetla widok działania jako ikonę, dopóki użytkownik nie wejdzie w interakcję z widokiem działania. Gdy użytkownik dotknij ikony. onOptionsItemSelected() rozwija widok czynności. Jeśli Twoja podklasa aktywności zastępuje onOptionsItemSelected(), metoda zastępowania musi wywoływać metodę super.onOptionsItemSelected(), aby klasa nadrzędna mogła rozwinąć widok działań.

Jeśli chcesz wykonać działanie po rozwinięciu lub zwiniętym działaniu, możesz zdefiniować klasę, implements MenuItem.OnActionExpandListener, oraz przekazać osobę z tych zajęć setOnActionExpandListener() Możesz na przykład aktualizować aktywność w zależności od tego, czy widok działania jest rozwinięty, zwinięto. Fragment kodu poniżej pokazuje, jak zdefiniować i przekazać detektor:

Kotlin

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.options, menu)

    // Define the listener.
    val expandListener = object : MenuItem.OnActionExpandListener {
        override fun onMenuItemActionCollapse(item: MenuItem): Boolean {
            // Do something when the action item collapses.
            return true // Return true to collapse the action view.
        }

        override fun onMenuItemActionExpand(item: MenuItem): Boolean {
            // Do something when it expands.
            return true // Return true to expand the action view.
        }
    }

    // Get the MenuItem for the action item.
    val actionMenuItem = menu?.findItem(R.id.myActionItem)

    // Assign the listener to that action item.
    actionMenuItem?.setOnActionExpandListener(expandListener)

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.options, menu);

    // Define the listener.
    OnActionExpandListener expandListener = new OnActionExpandListener() {
        @Override
        public boolean onMenuItemActionCollapse(MenuItem item) {
            // Do something when the action item collapses.
            return true;  // Return true to collapse action view.
        }

        @Override
        public boolean onMenuItemActionExpand(MenuItem item) {
            // Do something when it expands.
            return true;  // Return true to expand the action view.
        }
    };

    // Get the MenuItem for the action item.
    MenuItem actionMenuItem = menu.findItem(R.id.myActionItem);

    // Assign the listener to that action item.
    MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener);

    // For anything else you have to do when creating the options menu,
    // do the following:

    return true;
}

Dodaj dostawcę działania

Aby zadeklarować dostawcę działania, utwórz element <item> w menu paska narzędzi zasobu zgodnie z opisem w sekcji Dodawanie i obsługa działań. Dodaj actionProviderClass i ustaw go na pełną nazwę klasy dla klasy klasę dostawcy działań.

Na przykład ten kod deklaruje element ShareActionProvider, który jest widżetem zdefiniowane w bibliotece AndroidaX, która pozwala aplikacji udostępniać dane innym aplikacjom:

<item android:id="@+id/action_share"
    android:title="@string/share"
    app:showAsAction="ifRoom"
    app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>

W takim przypadku nie ma potrzeby deklarowania ikony dla widżetu, ponieważ ShareActionProvider udostępnia własną grafikę. Jeśli korzystasz z działania niestandardowego, zadeklarować ikonę.

Dodatkowe materiały

  • Zobacz ShareActionProvider to przykład dodawania działania udostępniania do górnego paska aplikacji.
  • Zobacz ActionProvider – Dowiedz się więcej o tworzeniu dostawcy działań niestandardowych.