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łanieactionLayout
: 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.
Gdy użytkownik kliknie ikonę lub pozycję menu, widżet rozwinie się i wypełni pasek narzędzi, wchodzenia z nim w interakcję.
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.