Die Toolbar
der AndroidX-Bibliothek bietet Nutzern verschiedene Möglichkeiten, mit Ihrer App zu interagieren. Im Hilfeartikel Aktionen hinzufügen und verarbeiten wird beschrieben, wie Sie eine Aktion definieren, die eine Schaltfläche oder ein Menüpunkt sein kann. In diesem Dokument wird beschrieben, wie Sie zwei vielseitige Komponenten hinzufügen:
- Eine Aktionsansicht ist eine Aktion, die umfangreiche Funktionen in der App-Leiste bietet. Mit einer Suchansicht können Nutzer beispielsweise ihren Suchtext in die App-Leiste eingeben, ohne Aktivitäten oder Fragmente ändern zu müssen.
- Ein Aktionsanbieter ist eine Aktion mit einem eigenen benutzerdefinierten Layout. Die Aktion wird zuerst als Schaltfläche oder Menüpunkt angezeigt. Wenn der Nutzer auf die Aktion tippt, steuert der Aktionsanbieter das Verhalten der Aktion wie von Ihnen definiert. So kann der Aktionsanbieter beispielsweise auf ein Tippen reagieren, indem er ein Menü anzeigt.
AndroidX bietet mehrere spezielle Widgets für Aktionsansichten und Aktionsanbieter. Das SearchView
-Widget implementiert beispielsweise eine Aktionsansicht zum Eingeben von Suchanfragen. Das ShareActionProvider
-Widget implementiert einen Aktionsanbieter, um Informationen für andere Apps freizugeben. Sie können auch eigene Aktionsansichten und Aktionsanbieter definieren.
Aktionsansicht hinzufügen
Wenn Sie eine Aktionsanzeige hinzufügen möchten, erstellen Sie ein <item>
-Element in der Menüressource der Symbolleiste, wie unter Aktionen hinzufügen und verarbeiten beschrieben. Fügen Sie dem <item>
-Element eines der folgenden Attribute hinzu:
actionViewClass
: Die Klasse eines Widgets, das die Aktion implementiertactionLayout
: eine Layoutressource, die die Komponenten der Aktion beschreibt
Legen Sie das showAsAction
-Attribut auf "ifRoom|collapseActionView"
oder "never|collapseActionView"
fest. Das Flag collapseActionView
gibt an, wie das Widget angezeigt werden soll, wenn der Nutzer nicht damit interagiert. Wenn sich das Widget in der App-Leiste befindet, wird es als Symbol angezeigt. Wenn sich das Widget im Dreipunkt-Menü befindet, wird es in der App als Menüpunkt angezeigt. Wenn der Nutzer mit der Aktionsansicht interagiert, wird sie maximiert, um die App-Leiste zu füllen.
Mit dem folgenden Code wird beispielsweise der App-Leiste ein SearchView
-Widget hinzugefügt:
<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" />
Wenn der Nutzer nicht mit dem Widget interagiert, zeigt die App das Widget als das von android:icon
angegebene Symbol an. Wenn in der App-Leiste kein Platz ist, fügt die App die Aktion dem Überlaufmenü hinzu.
Wenn der Nutzer auf das Symbol oder den Menüpunkt tippt, wird das Widget maximiert, um die Symbolleiste zu füllen, sodass der Nutzer damit interagieren kann.
Wenn Sie die Aktion konfigurieren müssen, tun Sie dies im onCreateOptionsMenu()
-Callback Ihrer Aktivität. Sie können die Objektreferenz der Aktionsanzeige abrufen, indem Sie die Methode getActionView()
aufrufen. Im folgenden Code wird beispielsweise die Objektreferenz für das im vorherigen Codebeispiel definierte SearchView
-Widget abgerufen:
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); }
Auf die Erweiterung der Aktionsansicht reagieren
Wenn das <item>
-Element der Aktion das Flag collapseActionView
hat, zeigt die App die Aktionsanzeige als Symbol an, bis der Nutzer mit der Aktionsanzeige interagiert. Wenn der Nutzer auf das Symbol tippt, maximiert der integrierte Handler für onOptionsItemSelected()
die Aktionsansicht. Wenn die Unterklasse der Aktivität die Methode onOptionsItemSelected()
überschreibt, muss die überschreibende Methode super.onOptionsItemSelected()
aufrufen, damit die übergeordnete Klasse die Aktionsansicht maximieren kann.
Wenn Sie etwas tun möchten, wenn die Aktion maximiert oder minimiert wird, können Sie eine Klasse definieren, die MenuItem.OnActionExpandListener
implementiert, und ein Mitglied dieser Klasse an setOnActionExpandListener()
übergeben.
So können Sie beispielsweise die Aktivität aktualisieren, je nachdem, ob eine Aktionsansicht maximiert oder minimiert ist. Das folgende Code-Snippet zeigt, wie ein Listener definiert und übergeben wird:
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; }
Aktionsanbieter hinzufügen
Wenn Sie einen Aktionsanbieter deklarieren möchten, erstellen Sie ein <item>
-Element in der Menüressource der Symbolleiste, wie unter Aktionen hinzufügen und verarbeiten beschrieben. Fügen Sie das Attribut actionProviderClass
hinzu und legen Sie es auf den voll qualifizierten Klassennamen der Aktionsanbieterklasse fest.
Im folgenden Code wird beispielsweise ein ShareActionProvider
deklariert. Das ist ein in der AndroidX-Bibliothek definiertes Widget, mit dem Ihre App Daten mit anderen Apps teilen kann:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
In diesem Fall ist es nicht erforderlich, ein Symbol für das Widget anzugeben, da ShareActionProvider
eigene Grafiken bereitstellt. Wenn Sie eine benutzerdefinierte Aktion verwenden, deklarieren Sie ein Symbol.
Weitere Informationen
- Unter
ShareActionProvider
finden Sie ein Beispiel dafür, wie Sie der App-Leiste oben eine Freigabeaktion hinzufügen. - Weitere Informationen zum Erstellen eines benutzerdefinierten Aktionsanbieters finden Sie unter
ActionProvider
.