Aktionsansichten und Aktionsanbieter verwenden

<ph type="x-smartling-placeholder">

Die AndroidX-Bibliothek Toolbar bietet wie Nutzer mit Ihrer App interagieren können. Unter Aktionen hinzufügen und verarbeiten wird beschrieben, wie Sie definieren eine Aktion, bei der es sich um eine Schaltfläche oder einen Menüpunkt handeln kann. In diesem Dokument wird beschrieben, wie Sie zwei vielseitige Komponenten:

  • Die Aktionsansicht ist eine Aktion, die in der App-Leiste umfangreiche Funktionen bietet. Für Beispiel: In einer Suchaktionsansicht können Nutzer ihren Suchtext in die App-Leiste eingeben, ohne Aktivitäten oder Fragmente zu ändern.
  • Ein Aktionsanbieter ist eine Aktion mit einem eigenen benutzerdefinierten Layout. Zu Beginn der Aktion als Schaltfläche oder Menüelement angezeigt; Wenn der Nutzer auf die Aktion tippt, steuert der Aktionsanbieter wie Sie das Verhalten der Aktion definieren. Beispielsweise könnte der Aktionsanbieter auf eine durch Einblenden eines Menüs.

AndroidX bietet mehrere spezialisierte Aktionsansichten und Widgets für Aktionsanbieter. Beispiel: Der Parameter Widget „SearchView“ Implementiert eine Aktionsansicht für die Eingabe von Suchanfragen. Die ShareActionProvider Das Widget implementiert einen Aktionsanbieter für die Weitergabe von Informationen an andere Apps. Sie können auch Ihre eigenen Aktionsansichten und Aktionsanbieter.

Aktionsansicht hinzufügen

Um eine Aktionsansicht hinzuzufügen, erstellen Sie ein <item> in der Menüressource der Symbolleiste hinzu, wie unter Aktionen hinzufügen und verarbeiten Fügen Sie dem Parameter <item>-Element:

  • actionViewClass: die Klasse eines Widgets, das die Aktion implementiert
  • actionLayout: eine Layoutressource, die die Komponenten der Aktion beschreibt

Setzen Sie das Attribut showAsAction auf "ifRoom|collapseActionView" oder "never|collapseActionView" Das Flag collapseActionView gibt an, wie das Widget anzuzeigen, wenn der Benutzer nicht damit interagiert. Befindet sich das Widget in der App-Leiste, zeigt das Widget als Symbol an. Befindet sich das Widget im Dreipunkt-Menü, zeigt die App das Widget an. als Menüpunkt festlegen. Wenn der Nutzer mit der Aktionsansicht interagiert, wird sie erweitert und füllt die App-Leiste aus.

Mit dem folgenden Code wird der App-Leiste beispielsweise 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 angegebene Symbol an von android:icon. Ist in der App-Leiste nicht genügend Platz, fügt die App die Aktion zur Dreipunkt-Menü.

<ph type="x-smartling-placeholder">
</ph> Ein Bild, das eine Suchleiste mit voran- und nachgestellten Symbolen zeigt. <ph type="x-smartling-placeholder">
</ph> Abbildung 1: Suchleiste mit voran- und nachgestellten Symbolen.

Wenn Nutzende auf das Symbol oder den Menüpunkt tippen, wird das Widget erweitert und füllt die Symbolleiste aus. wie Nutzende damit interagieren können.

<ph type="x-smartling-placeholder">
</ph> Ein Bild, auf dem eine Suchansicht zu sehen ist, die geöffnet ist, wenn die Suchleiste im Fokus ist. <ph type="x-smartling-placeholder">
</ph> Abbildung 2: Die Suchansicht wird geöffnet, sobald die Suchleiste hervorgehoben ist.

Wenn Sie die Aktion konfigurieren müssen, tun Sie dies in der onCreateOptionsMenu() Callback des Nutzers an. Sie können den Objektverweis der Aktionsansicht abrufen, indem Sie die Methode getActionView() . Mit dem folgenden Code wird beispielsweise der Objektverweis für das SearchView abgerufen. Widget, das im vorherigen Codebeispiel definiert wurde:

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);
}
<ph type="x-smartling-placeholder">

Maximierte Ansicht „Auf Aktion reagieren“

Wenn das <item>-Element der Aktion das Flag collapseActionView hat, gibt das Element wird die Aktionsansicht als Symbol angezeigt, bis der Nutzer mit der Aktionsansicht interagiert. Wenn Nutzende tippt auf das Symbol, den integrierten Handler für onOptionsItemSelected() Maximiert die Aktionsansicht. Wenn Ihre abgeleitete Aktivität die onOptionsItemSelected()-Methode muss Ihre Überschreibungsmethode Folgendes aufrufen: super.onOptionsItemSelected(), damit die übergeordnete Klasse die Aktionsansicht maximieren kann.

Wenn Sie eine Aktion ausführen möchten, während die Aktion maximiert oder minimiert ist, können Sie eine Klasse definieren, die implements MenuItem.OnActionExpandListener, und ein Mitglied des Kurses an setOnActionExpandListener(). Sie können die Aktivität beispielsweise abhängig davon aktualisieren, ob eine Aktionsansicht maximiert oder minimiert. 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 im Menü der Symbolleiste ein <item>-Element enthalten, wie unter Aktionen hinzufügen und verarbeiten beschrieben. Hinzufügen eines actionProviderClass und legen Sie dafür den voll qualifizierten Klassennamen für die Action Provider-Klasse.

Mit dem folgenden Code wird beispielsweise ein ShareActionProvider deklariert, bei dem es sich um ein Widget die in der AndroidX-Bibliothek definiert sind, über die deine 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 nötig, ein Symbol für das Widget anzugeben, da ShareActionProvider stellt eigene Grafiken zur Verfügung. Wenn Sie eine benutzerdefinierte Aktion verwenden, ein Symbol deklarieren.

Weitere Informationen

  • Weitere Informationen finden Sie unter ShareActionProvider finden Sie ein Beispiel für das Hinzufügen einer Freigabeaktion zur oberen App-Leiste.
  • Weitere Informationen finden Sie unter ActionProvider für Weitere Informationen zum Erstellen eines Anbieters für benutzerdefinierte Aktionen.