Biblioteka AndroidX udostępnia różne sposoby interakcji użytkowników z Twoją aplikacją.
Toolbar W artykule Dodawanie działań i ich obsługa opisujemy, jak zdefiniować działanie, które może być przyciskiem lub elementem menu. Z tego dokumentu dowiesz się, jak dodać 2 wszechstronne komponenty:
- Widok działania to działanie, które zapewnia bogatą funkcjonalność na pasku aplikacji. Na przykład widok działania wyszukiwania umożliwia użytkownikowi wpisywanie tekstu wyszukiwania na pasku aplikacji bez konieczności zmiany aktywności lub fragmentów.
- Dostawca działania to działanie z własnym, dostosowanym układem. Działanie początkowo pojawia się jako przycisk lub element menu. Gdy użytkownik kliknie działanie, dostawca działania kontroluje jego zachowanie w dowolny sposób. Na przykład dostawca działania może reagować na kliknięcie, wyświetlając menu.
AndroidX udostępnia kilka specjalistycznych widżetów widoku działania i dostawcy działania. Na przykład widżet SearchView implementuje widok działania do wprowadzania zapytań. Widżet ShareActionProvider implementuje dostawcę działania do udostępniania informacji innym aplikacjom. Możesz też zdefiniować własne widoki działania i dostawców działania.
Dodawanie widoku działania
Aby dodać widok działania, utwórz element
<item>
w zasobie menu paska narzędzi, jak opisano w artykule
Dodawanie działań i ich obsługa. Do elementu
<item> dodaj jeden z tych atrybutów:
actionViewClass: klasa widżetu, który implementuje działanie.actionLayout: zasób układu opisujący komponenty działania.
Ustaw atrybut showAsAction na wartość "ifRoom|collapseActionView" lub "never|collapseActionView". Flaga collapseActionView wskazuje, jak wyświetlać widżet, gdy użytkownik nie wchodzi z nim w interakcję. Jeśli widżet znajduje się na pasku aplikacji, aplikacja wyświetla go jako ikonę. Jeśli widżet znajduje się w rozszerzonym menu, aplikacja wyświetla go jako pozycja menu. Gdy użytkownik wejdzie w interakcję z widokiem działania, rozwinie się on, aby wypełnić pasek aplikacji.
Na przykład ten kod dodaje widżet SearchView do paska aplikacji:
<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 go jako ikonę określoną przez android:icon. Jeśli na pasku aplikacji nie ma miejsca, aplikacja dodaje działanie do rozszerzonego menu.
Gdy użytkownik kliknie ikonę lub element menu, widżet rozwinie się, aby wypełnić pasek narzędzi, umożliwiając użytkownikowi interakcję z nim.
Jeśli musisz skonfigurować działanie, zrób to w wywołaniu zwrotnym onCreateOptionsMenu() aktywności. Odwołanie do obiektu widoku działania możesz uzyskać, wywołując metodę getActionView(). Na przykład ten kod pobiera odwołanie do obiektu widżetu SearchView zdefiniowanego 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 działania <item> ma flagę collapseActionView,
aplikacja wyświetla widok działania jako ikonę, dopóki użytkownik nie wejdzie w interakcję z widokiem działania. Gdy użytkownik kliknie ikonę, wbudowany moduł obsługi onOptionsItemSelected() rozwinie widok działania. Jeśli podklasa aktywności zastępuje metodę
onOptionsItemSelected(), metoda zastępująca musi wywołać
super.onOptionsItemSelected(), aby klasa nadrzędna mogła rozwinąć widok działania.
Jeśli chcesz coś zrobić, gdy działanie jest rozwinięte lub zwinięte, możesz zdefiniować klasę, która implementuje MenuItem.OnActionExpandListener, i przekazać element tej klasy do setOnActionExpandListener().
Możesz na przykład zaktualizować aktywność na podstawie tego, czy widok działania jest rozwinięty czy zwinięty. Ten fragment kodu pokazuje, jak zdefiniować i przekazać odbiorcę:
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; }
Dodawanie dostawcy działania
Aby zadeklarować dostawcę działania, utwórz element <item> w zasobie menu paska narzędzi, jak opisano w artykule Dodawanie działań i ich obsługa. Dodaj atrybut actionProviderClass i ustaw go na w pełni kwalifikowaną nazwę klasy dostawcy działania.
Na przykład ten kod deklaruje ShareActionProvider, czyli widżet zdefiniowany w bibliotece AndroidX, który umożliwia aplikacji udostępnianie danych innym aplikacjom:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
W tym przypadku nie trzeba deklarować ikony widżetu, ponieważ ShareActionProvider udostępnia własną grafikę. Jeśli używasz działania niestandardowego, zadeklaruj ikonę.
Dodatkowe materiały
- Przykład dodawania działania udostępniania do górnego paska aplikacji znajdziesz w artykule
ShareActionProvider. - Więcej informacji o tworzeniu niestandardowego dostawcy działania znajdziesz w artykule
ActionProvider.