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:
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)
}
@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:
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
}
@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.