Toolbar
w bibliotece AndroidX zapewnia użytkownikom różne sposoby korzystania z aplikacji. Dodawanie i obsługa działań opisuje, jak zdefiniować działanie, które może być przyciskiem lub pozycją menu. W tym dokumencie opisujemy, jak dodać
2 uniwersalne komponenty:
- Widok działań to działanie z licznymi funkcjami na pasku aplikacji. Na przykład widok działań związanych z wyszukiwaniem pozwala użytkownikowi wpisać wyszukiwany tekst w pasku aplikacji bez konieczności zmiany aktywności lub fragmentów.
- Dostawca działania to działanie z własnym niestandardowym układem. Czynność początkowo ma postać przycisku lub elementu menu. Gdy użytkownik kliknie działanie, jego dostawca określa sposób jego działania w dowolny sposób. Dostawca działań może na przykład zareagować na kliknięcie, wyświetlając menu.
AndroidX udostępnia kilka wyspecjalizowanych widoków działań i widżetów dostawców działań. Na przykład widżet SearchView
implementuje widok działań służący do wpisywania wyszukiwanych haseł. Widżet ShareActionProvider
implementuje dostawcę działań służący do udostępniania informacji innym aplikacjom. Możesz też zdefiniować własne widoki działań i ich dostawców.
Dodawanie widoku działania
Aby dodać widok działań, utwórz element <item>
w zasobie menu paska narzędzi zgodnie z opisem w sekcji Dodawanie działań i ich obsługa. Dodaj do elementu <item>
jeden z tych atrybutów:
actionViewClass
: klasa widżetu, który wdraża działanie.actionLayout
: zasób układu opisujący komponenty działania.
Ustaw atrybut showAsAction
na "ifRoom|collapseActionView"
lub "never|collapseActionView"
. Flaga collapseActionView
wskazuje sposób wyświetlania widżetu, gdy użytkownik nie wchodzi z nim w interakcję. Jeśli widżet znajduje się na pasku aplikacji, wyświetla go 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łań, rozwinie się on, wypełniając 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 będzie miejsca, aplikacja doda działanie do rozszerzonego menu.
Gdy użytkownik kliknie ikonę lub element menu, widżet rozwinie się, wypełniając 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. Odniesienie do obiektu widoku działania możesz uzyskać, wywołując metodę getActionView()
. Na przykład ten kod pobiera odwołanie do obiektu dla 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); }
Reakcja na rozwinięcie widoku działania
Jeśli element <item>
akcji ma flagę collapseActionView
, aplikacja wyświetla widok działania jako ikonę, dopóki użytkownik nie wejdzie z nim w interakcję. Gdy użytkownik kliknie ikonę, wbudowana moduł obsługi onOptionsItemSelected()
rozwinie widok działania. Jeśli podklasa aktywności zastępuje metodę onOptionsItemSelected()
, metoda zastępowania musi wywołać metodę super.onOptionsItemSelected()
, aby klasa nadrzędna mogła rozwinąć widok działania.
Jeśli chcesz coś zrobić, gdy akcja jest rozwinięta lub zwinięta, możesz zdefiniować klasę implementującą MenuItem.OnActionExpandListener
i przekazać jej członka do setOnActionExpandListener()
.
Możesz na przykład aktualizować aktywność w zależności od tego, czy widok działania jest rozwinięty czy zwinięty. Ten fragment kodu 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łań
Aby zadeklarować dostawcę działania, utwórz element <item>
w zasobach menu na pasku narzędzi zgodnie z opisem w sekcji Dodawanie i obsługa działań. Dodaj atrybut actionProviderClass
i ustaw go na pełną i jednoznaczną nazwę klasy dla klasy dostawcy działań.
Na przykład ten kod deklaruje ShareActionProvider
, czyli widżet zdefiniowany w bibliotece AndroidX, który umożliwia 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 takim przypadku nie ma potrzeby deklarowania ikony widżetu, bo ShareActionProvider
udostępnia własną grafikę. Jeśli korzystasz z działania niestandardowego,
zadeklaruj ikonę.
Dodatkowe materiały
- Przykład dodania działania udostępniania do górnego paska aplikacji znajdziesz w sekcji
ShareActionProvider
. - Więcej informacji o tworzeniu dostawcy działań niestandardowych znajdziesz w sekcji
ActionProvider
.