Suchoberfläche erstellen

Wenn Sie Ihrer App Suchfunktionen hinzufügen möchten, hilft Ihnen Android dabei, die Benutzeroberfläche mit einem Suchdialogfeld im oberen Bereich des Aktivitätsfensters oder eines Such-Widgets, das Sie in Ihr Layout einfügen können. Sowohl das Suchdialogfeld als auch das Widget können die Suchanfrage des Nutzers an eine bestimmte Aktivitäten in Ihrer App. So kann der Nutzer von jedem beliebigen Standort aus eine Suche starten. Aktivität, bei der das Suchdialogfeld oder Widget verfügbar ist und das System um die Suche durchzuführen und die Ergebnisse zu präsentieren.

Weitere Funktionen, die für das Dialogfeld und das Widget für die Suche verfügbar sind:

  • Sprachsuche
  • Suchvorschläge basierend auf den letzten Suchanfragen
  • Suchvorschläge, die mit den tatsächlichen Ergebnissen in Ihren App-Daten übereinstimmen

In diesem Dokument erfahren Sie, wie Sie Ihre App so einrichten, dass sie eine Suchoberfläche bietet das vom Android-System bei der Bereitstellung von Suchanfragen unterstützt wird. Dabei werden entweder Suchdialogfeld oder Such-Widget aus.

Weitere Informationen:

Grundlagen

Entscheiden Sie zuerst, ob Sie die Suchoberfläche implementieren möchten über das Such-Dialogfeld oder das Such-Widget. Sie liefern die gleiche Suchanfrage Funktionen, jedoch auf leicht unterschiedliche Weise:

  • Das Suchdialogfeld ist eine UI-Komponente, die von das Android-System. Nach Aktivierung durch den Nutzer wird das Suchdialogfeld hier angezeigt: ganz oben in der Aktivität.

    Das Android-System steuert alle Ereignisse im Suchdialogfeld. Wenn der Parameter der Nutzenden eine Anfrage sendet, liefert das System diese an die Aktivität, die Sie für die Verarbeitung von Suchanfragen angeben. Das Dialogfeld kann auch eine Suche enthalten während die Nutzenden Vorschläge machen.

  • Das Such-Widget ist eine Instanz von SearchView, die Sie an einer beliebigen Stelle im Layout platzieren. Standardmäßig verhält sich das Such-Widget wie ein Standard EditText nichts passiert, aber Sie können es so konfigurieren, dass das Android- verarbeitet alle Eingabeereignisse, stellt Abfragen an die entsprechenden und bietet Suchvorschläge, genau wie die Suche Dialogfeld.
<ph type="x-smartling-placeholder">

Führt der Nutzer eine Suche über das Suchdialogfeld oder ein Such-Widget aus, erstellt das System eine Intent und die Nutzeranfrage darin gespeichert. Das System startet dann die Aktivität, angeben, dass sie Suchvorgänge – die "durchsuchbare Aktivität" – verarbeiten möchten, und liefern diese die Absicht. Um deine App für diese Art der unterstützten Suche einzurichten, benötigst du die Folgendes:

  • Eine Suchkonfiguration
    Eine XML-Datei, die einige Einstellungen für den Suchdialog oder das Widget konfiguriert. Hier finden Sie Einstellungen für Funktionen wie die Sprachsuche, Suchvorschläge, und einen Hinweistext für das Suchfeld.
  • Eine durchsuchbare Aktivität
    Die Activity die die Suchanfrage empfängt, Ihre Daten durchsucht und die
  • Eine Suchoberfläche, die auf einem der folgenden Dienste bereitgestellt wird:
    • Dialogfeld „Suche“
      Das Suchfenster ist standardmäßig ausgeblendet. Sie erscheint oben auf der Bildschirm, wenn du anrufst onSearchRequested() Der Nutzer tippt auf die Schaltfläche Suchen.
    • Ein SearchView Widget
      Mit dem Such-Widget können Sie das Suchfeld an einer beliebigen Stelle im auch als Aktionsansicht in der App-Leiste.

Im weiteren Verlauf dieses Dokuments erfahren Sie, wie Sie die Suchkonfiguration erstellen. und suchbare Aktivitäten und wie Sie eine Suchoberfläche mit dem Suchdialogfeld oder Such-Widget.

Durchsuchbare Konfiguration erstellen

Als Erstes brauchen Sie eine XML-Datei namens Suchkonfiguration. Sie konfiguriert bestimmte UI-Aspekte des Suchdialogfelds oder Widgets und definiert, wie Vorschläge und die Sprachsuche. Diese Datei wird üblicherweise namens searchable.xml und muss im res/xml/ gespeichert werden Projektverzeichnis.

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

Die Konfigurationsdatei für die Suche muss Folgendes enthalten: <searchable> -Element als Stammknoten hinzufügen und ein oder mehrere Attribute angeben, wie in den folgendes Beispiel:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/app_label"
    android:hint="@string/search_hint" >
</searchable>

Das Attribut android:label ist das einzige erforderliche Attribut. Es verweist auf eine String-Ressource, bei der es sich um den App-Namen handeln muss. Dieses Label ist nicht angezeigt werden, bis Sie die Suchvorschläge für das Schnellsuchfeld aktivieren unter An welchem Punkt in der Liste der durchsuchbaren Elemente im System das Label angezeigt wird Einstellungen.

Auch wenn dies nicht erforderlich ist, empfehlen wir, immer das Tag Attribut android:hint, das einen Hinweisstring in der Suche bereitstellt , bevor Nutzende eine Suchanfrage eingeben. Der Hinweis ist wichtig, weil er wichtige Hinweise darauf, wonach Nutzer suchen können.

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

Für das <searchable>-Element sind mehrere andere Attribute zulässig. Die meisten Attribute werden jedoch erst benötigt, wenn Sie Funktionen wie Suchvorschläge und Sprachsuche. Detaillierte Informationen zum Konfigurationsdatei für die Suche finden Sie in der Suchkonfiguration Referenzdokument.

Suchbare Aktivität erstellen

Eine suchbare Aktivität ist der Activity in Ihrer App, der anhand eines Abfragestrings sucht und die Suchergebnisse präsentiert.

Wenn der Nutzer im Suchdialogfeld oder Widget eine Suche ausführt, beginnt Ihre durchsuchbare Aktivität und liefert die Suchanfrage in einem Intent mit dem ACTION_SEARCH Aktion ausführen. Ihre suchbare Aktivität ruft die Abfrage aus dem QUERY werden Ihre Daten durchsucht und die Ergebnisse präsentiert.

Da Sie das Suchdialogfeld oder das Such-Widget in jede andere Aktivität Ihre App nutzen, muss das System erkennen, welche Aktivität Ihre Suche ist, damit damit die Suchanfrage richtig bereitgestellt werden kann. Deklarieren Sie also zuerst Ihre durchsuchbare Aktivität in der Android-Manifestdatei.

Eine suchbare Aktivität deklarieren

Falls Sie noch keine haben, erstellen Sie eine Activity, die und präsentiert Ergebnisse. Sie müssen die Suchfunktion nicht erstellt haben, erstellen Sie einfach eine Aktivität, die Sie im Manifests. Im Manifest <activity> -Element handelt, gehen Sie so vor:

  1. Deklarieren Sie die Aktivität, um den Intent ACTION_SEARCH in einer <intent-filter> -Elements.
  2. Geben Sie die Suchkonfiguration an, die in einem <meta-data> -Elements.

Dies wird im folgenden Beispiel gezeigt:

<application ... >
    <activity android:name=".SearchableActivity" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
    </activity>
    ...
</application>

Das <meta-data>-Element muss den Parameter Attribut android:name mit dem Wert "android.app.searchable" und die android:resource mit einem Verweis auf die durchsuchbare Konfigurationsdatei. Im vor dem Beispiel auf res/xml/searchable.xml -Datei.

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

Suche durchführen

Nachdem du deine suchbaren Aktivitäten im Manifest deklariert hast, folge dieser Anleitung: Verfahren zur Durchführung einer Suche in Ihrer durchsuchbaren Aktivität:

  1. Rufen Sie die Abfrage ab.
  2. Daten durchsuchen
  3. Präsentieren Sie die Ergebnisse.

Abfrage erhalten

Wenn ein Nutzer eine Suche über das Suchdialogfeld oder das Such-Widget ausführt, startet deine suchbaren Aktivitäten und sendet ein ACTION_SEARCH-Objekt die Nutzerabsicht verstehen. Dieser Intent überträgt die Suchanfrage im String QUERY. extra. Suchen Sie beim Start der Aktivität nach diesem Intent und extrahieren Sie den String. So erhalten Sie zum Beispiel die Suchanfrage, wenn Ihre durchsuchbare Aktivität beginnt:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.search)

    // Verify the action and get the query.
    if (Intent.ACTION_SEARCH == intent.action) {
        intent.getStringExtra(SearchManager.QUERY)?.also { query ->
            doMySearch(query)
        }
    }
}

Java

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.search);

    // Get the intent, verify the action, and get the query.
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
    }
}

Der String QUERY wird immer im ACTION_SEARCH-Intent. Im vorherigen Beispiel lautet die Abfrage abgerufen und an eine lokale doMySearch()-Methode übergeben, wobei der der eigentliche Suchvorgang abgeschlossen ist.

Daten durchsuchen

Das Speichern und Suchen Ihrer Daten ist für Ihre App unterschiedlich. Sie können Ihre Daten auf viele Arten speichern und durchsuchen, und in diesem Dokument wird nicht erklärt, wie das geht. Überlegen Sie, wie Sie Ihre Daten im Hinblick auf Ihre Anforderungen und Daten speichern und durchsuchen. Format. Hier einige Tipps, die Sie eventuell umsetzen können:

  • Wenn Ihre Daten in einer SQLite-Datenbank auf dem Gerät gespeichert sind, Volltextsuche mit FTS3 anstelle von LIKE ist eine zuverlässigere Suche in Textdaten möglich und deutlich schneller Ergebnisse liefern. Weitere Informationen finden Sie unter sqlite.org für Informationen zu FTS3 und den SQLiteDatabase .
  • Wenn deine Daten online gespeichert sind, kann die wahrgenommene Suchleistung durch die Datenverbindung des Nutzers behindert wird. Vielleicht möchten Sie eine bis Ihre Suche wieder angezeigt wird. Weitere Informationen finden Sie unter android.net für eine Referenz zu Netzwerk-APIs und ProgressBar finden Sie Informationen zum Anzeigen der Fortschrittsanzeige.
<ph type="x-smartling-placeholder">

Ergebnisse präsentieren

Unabhängig davon, wo sich Ihre Daten befinden und wie Sie sie durchsuchen, empfehlen wir, Suchergebnisse für Ihre durchsuchbaren Aktivitäten mit einem Adapter Dieses können Sie alle Suchergebnisse in einem RecyclerView Wenn Ihre Daten aus einer SQLite-Datenbankabfrage stammen, können Sie Ihre Ergebnisse auf eine RecyclerView mit CursorAdapter. Falls Ihre Daten ein anderes Format haben, können Sie eine Erweiterung des BaseAdapter

Ein Adapter bindet jedes Element aus einem Datensatz View-Objekt. Wann? wird der Adapter auf einen RecyclerView angewendet, als einzelne Ansicht in die Liste eingefügt. Adapter ist nur eine Schnittstelle, sodass Implementierungen wie CursorAdapter – zum Binden von Daten aus einer Cursor – sind erforderlich. Wenn keine der vorhandenen Implementierungen für Ihre Daten geeignet ist, können Sie Implementieren Sie Ihre eigenen aus BaseAdapter.

Dialogfeld für die Suche verwenden

Das Dialogfeld für die Suche enthält ein unverankertes Suchfeld oben auf dem Bildschirm. mit dem App-Symbol auf der linken Seite. Im Dialogfeld für die Suche können Suchvorschläge angezeigt werden während die Nutzer tippen. Wenn der Nutzer eine Suche ausführt, sendet das System die Suchanfrage an eine durchsuchbare Aktivität, die die Suche durchführt.

Standardmäßig ist das Suchdialogfeld immer ausgeblendet, bis der Nutzer es aktiviert. Deine App kann das Suchdialogfeld durch Aufrufen von onSearchRequested() Diese Methode funktioniert jedoch erst, Dialogfeld für die Suche für die Aktivität aktivieren

Um das Suchdialogfeld für Suchen zu aktivieren, geben Sie dem System an, Suchbare Aktivitäten müssen Suchanfragen aus dem Suchdialogfeld erhalten. Für haben wir im vorherigen Abschnitt über Erstellen einer durchsuchbaren Aktivität, einer durchsuchbaren Die Aktivität „SearchableActivity“ wurde erstellt. Wenn Sie eine separaten Aktivität, wie z. B. mit dem Namen OtherActivity, um das Ereignis Dialog suchen und Suchanfragen an SearchableActivity senden, deklarieren im Manifest angeben, dass SearchableActivity die suchbare Aktivität ist zur Verwendung für das Suchdialogfeld in OtherActivity.

Um die durchsuchbare Aktivität für das Suchdialogfeld einer Aktivität zu deklarieren, fügen Sie ein <meta-data>-Element innerhalb der entsprechenden Aktivität <activity>-Element. Das <meta-data> muss das Attribut android:value enthalten, das die Klassenname der suchbaren Aktivität und das Attribut android:name mit dem Wert "android.app.default_searchable".

Hier ist z. B. die Deklaration für eine durchsuchbare Aktivität SearchableActivity und eine weitere Aktivität, OtherActivity, die SearchableActivity verwendet, um Suchanfragen ausführen, die über das Dialogfeld „Suchen“ ausgeführt wurden:

<application ... >
    <!-- This is the searchable activity; it performs searches. -->
    <activity android:name=".SearchableActivity" >
        <intent-filter>
            <action android:name="android.intent.action.SEARCH" />
        </intent-filter>
        <meta-data android:name="android.app.searchable"
                   android:resource="@xml/searchable"/>
    </activity>

    <!-- This activity enables the search dialog to initiate searches
         in the SearchableActivity. -->
    <activity android:name=".OtherActivity" ... >
        <!-- Enable the search dialog to send searches to SearchableActivity. -->
        <meta-data android:name="android.app.default_searchable"
                   android:value=".SearchableActivity" />
    </activity>
    ...
</application>

Weil OtherActivity jetzt ein <meta-data>-Element, das angibt, welche durchsuchbaren Aktivitäten für Suchanfragen verwendet wird, aktiviert die Aktivität das Suchdialogfeld. Obwohl die Nutzenden In dieser Aktivität aktiviert die Methode onSearchRequested() das Ereignis Dialogfeld für die Suche. Wenn der Nutzer die Suche ausführt, startet das System SearchableActivity und liefert ACTION_SEARCH die Nutzerabsicht verstehen.

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

Wenn Sie möchten, dass bei jeder Aktivität in Ihrer App ein Suchdialogfeld angezeigt wird, fügen Sie das vorangehende <meta-data>-Element als untergeordnetes Element des <application> -Elements anstelle von <activity>. So kann jede Aktivität übernimmt den Wert, stellt das Dialogfeld für die Suche bereit und stellt Suchanfragen an den dieselbe Suchaktivität. Bei mehreren durchsuchbaren Aktivitäten können Sie die standardmäßige Suchaktivität überschreiben, <meta-data>-Deklaration innerhalb einzelner Aktivitäten.

Wenn das Dialogfeld für die Suche jetzt für deine Aktivitäten aktiviert ist, kannst du deine App Suchanfragen durchführen.

Dialogfeld für die Suche aufrufen

Obwohl einige Geräte eine spezielle Suchschaltfläche haben, kann das Verhalten der kann je nach Gerät variieren und auf vielen Geräten wird keine klicken. Wenn Sie also das Suchdialogfeld verwenden, müssen Sie eine Suchschaltfläche in Ihrer Benutzeroberfläche, die das Suchdialogfeld durch Aufrufen von onSearchRequested()

Fügen Sie beispielsweise eine Suchschaltfläche in die Optionsmenü oder das Layout der Benutzeroberfläche das onSearchRequested() aufruft.

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

Sie können auch die Funktion mit der die API aktiviert wird, Suchdialogfeld, wenn der Nutzer mit der Eingabe über die Tastatur beginnt. Die Tastenanschläge sind in den Suchdialog eingefügt. Du kannst in deinen Aktivitäten die Typ-to-Search-Funktion aktivieren durch einen Anruf setDefaultKeyMode oder DEFAULT_KEYS_SEARCH_LOCAL – während deiner Aktivität onCreate() .

Auswirkungen des Suchdialogfelds auf den Aktivitätslebenszyklus

Das Dialogfeld für die Suche ist ein Dialog, die schwebt oben auf dem Bildschirm. Es verursacht keine Änderungen im Aktivitäts-Stack. wenn das Suchdialogfeld erscheint, werden keine Lebenszyklusmethoden wie onPause() – sind aufgerufen. Ihre Aktivität verliert den Eingabefokus, da der Eingabefokus Suchfenster.

Wenn Sie bei der Aktivierung des Suchdialogfelds benachrichtigt werden möchten, überschreiben Sie die onSearchRequested()-Methode. Wenn das System diese Methode aufruft, ist ein Hinweis darauf, dass der Eingabefokus Ihrer Aktivität auf das Dialogfeld für die Suche geht, sodass kannst du beliebige Maßnahmen ergreifen, die für das Ereignis angemessen sind, z. B. ein Spiel pausieren. Es sei denn, Sie übergeben den Suchkontext , die in einem anderen Abschnitt dieses Dokuments besprochen werden, beenden Sie die durch Aufrufen der Implementierung der Basisklasse:

Kotlin

override fun onSearchRequested(): Boolean {
    pauseSomeStuff()
    return super.onSearchRequested()
}

Java

@Override
public boolean onSearchRequested() {
    pauseSomeStuff();
    return super.onSearchRequested();
}

Wenn der Nutzer die Suche durch Tippen auf die Schaltfläche „Zurück“ abbricht, erscheint der Suchdialog wird geschlossen und die Aktivität gewinnt wieder den Eingabefokus. Sie können sich registrieren, um Benachrichtigungen zu erhalten. wenn das Dialogfeld für die Suche mit setOnDismissListener(), setOnCancelListener(), oder beides. Sie müssen nur die OnDismissListener, da es jedes Mal aufgerufen wird, wenn das Dialogfeld für die Suche geschlossen wird. Die OnCancelListener Bezieht sich nur auf Ereignisse, bei denen der Nutzer das Suchdialogfeld explizit schließt, sodass wird er nicht aufgerufen, wenn eine Suche ausgeführt wird. Wenn die Suche ausgeführt wird, wird das Suchfenster automatisch ausgeblendet.

Wenn es sich bei der aktuellen Aktivität nicht um die suchbare Aktivität handelt, Aktivitätslebenszyklus-Ereignisse werden ausgelöst, wenn der Nutzer eine Suche: Die aktuelle Aktivität erhält wie beschrieben onPause(). in der Einführung in Aktivitäten. Handelt es sich bei der aktuellen Aktivität jedoch um die durchsuchbare Aktivität, dann geschieht Folgendes:

  • Standardmäßig erhält die suchbare Aktivität den Intent ACTION_SEARCH mit einem Aufruf von onCreate(). Eine neue Instanz der Aktivität wird ganz oben in der Aktivität angezeigt. Stacks. Es werden nun zwei Instanzen Ihrer durchsuchbaren Aktivitäten in der Aktivitäten-Stacks. Wenn Sie auf die Schaltfläche „Zurück“ tippen, gelangen Sie zurück zum vorherigen Instanz der durchsuchbaren Aktivität zu, anstatt die durchsuchbare Aktivität zu verlassen Aktivitäten.
  • Wenn Sie android:launchMode auf "singleTop" setzen, empfängt die suchbare Aktivität den Intent ACTION_SEARCH. durch einen Anruf bei onNewIntent(Intent), und übergeben den neuen Intent ACTION_SEARCH. Hier sehen Sie zum Beispiel, wenn der Startmodus der durchsuchbaren Aktivität ist "singleTop":

    Kotlin

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.search)
        handleIntent(intent)
    }
    
    override fun onNewIntent(intent: Intent) {
        super.onNewIntent(intent)
        setIntent(intent)
        handleIntent(intent)
    }
    
    private fun handleIntent(intent: Intent) {
        if (Intent.ACTION_SEARCH == intent.action) {
            intent.getStringExtra(SearchManager.QUERY)?.also { query ->
                doMySearch(query)
            }
        }
    }
    

    Java

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.search);
        handleIntent(getIntent());
    }
    
    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
        handleIntent(intent);
    }
    
    private void handleIntent(Intent intent) {
        if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
          String query = intent.getStringExtra(SearchManager.QUERY);
          doMySearch(query);
        }
    }
    

    Im Vergleich zum Beispielcode im Abschnitt durchführen einer Suche, der den gesamten Code zur Verarbeitung Die Suchabsicht ist nun in der Methode handleIntent() enthalten, sodass sowohl onCreate() und onNewIntent() können sie ausführen.

    Wenn das System onNewIntent(Intent) aufruft, ist die Aktivität nicht neu gestartet, sodass der getIntent() gibt den mit onCreate() empfangenen Intent zurück. Deshalb müssen Sie setIntent(Intent) innerhalb von onNewIntent(Intent), damit der vom Die Aktivitäten werden für den Fall aktualisiert, dass Sie getIntent() später anrufen.

Das zweite Szenario, bei dem der "singleTop"-Startmodus verwendet wird, zu bevorzugen, da der Nutzer nach einer Suche weitere und Ihre App nicht mehrere Instanzen des durchsuchbare Aktivitäten. Wir empfehlen, die Suchaktivität auf Startmodus für "singleTop" im App-Manifest, wie im folgendes Beispiel:

<activity android:name=".SearchableActivity"
          android:launchMode="singleTop" >
    <intent-filter>
        <action android:name="android.intent.action.SEARCH" />
    </intent-filter>
    <meta-data
          android:name="android.app.searchable"
          android:resource="@xml/searchable"/>
  </activity>

Kontextdaten für Karten-/Ticketsuche

In einigen Fällen können Sie die darin enthaltenen Suchanfragen verfeinern, die durchsuchte Aktivität für jede durchgeführte Suche. Wenn Sie jedoch die Ihre Suchkriterien basierend auf der Aktivität, über die der Nutzer eine können Sie zusätzliche Daten in dem Intent angeben, an den das System Ihre Suchaktivitäten. Sie können die zusätzlichen Daten im Feld APP_DATA Bundle, was im Intent ACTION_SEARCH enthalten.

Um diese Art von Daten an Ihre durchsuchbaren Aktivitäten zu übergeben, überschreiben Sie onSearchRequested()-Methode für die Aktivität, über die der Nutzer eine Suche ausführen, eine Bundle mit den zusätzlichen Daten erstellen und Anruf startSearch() um das Dialogfeld für die Suche zu aktivieren. Beispiel:

Kotlin

override fun onSearchRequested(): Boolean {
    val appData = Bundle().apply {
        putBoolean(JARGON, true)
    }
    startSearch(null, false, appData, false)
    return true
}

Java

@Override
public boolean onSearchRequested() {
     Bundle appData = new Bundle();
     appData.putBoolean(SearchableActivity.JARGON, true);
     startSearch(null, false, appData, false);
     return true;
 }

Die Rückgabe von "true" bedeutet, dass dieses Callback-Ereignis erfolgreich verarbeitet wurde und Rufen Sie startSearch() auf, um den Suchdialog zu aktivieren. Nachdem der Nutzer eine Anfrage sendet, wird diese zusammen mit den Daten an Ihre durchsuchbare Aktivität gesendet. die Sie hinzufügen. Sie können die zusätzlichen Daten aus dem APP_DATA extrahieren. Bundle, um die Suche zu verfeinern, wie im folgenden Beispiel gezeigt:

Kotlin

val jargon: Boolean = intent.getBundleExtra(SearchManager.APP_DATA)?.getBoolean(JARGON) ?: false

Java

Bundle appData = getIntent().getBundleExtra(SearchManager.APP_DATA);
if (appData != null) {
    boolean jargon = appData.getBoolean(SearchableActivity.JARGON);
}
<ph type="x-smartling-placeholder">

Such-Widget verwenden

Ein Bild, das eine Suchansicht in der oberen Leiste der App zeigt

Abbildung 1: Das SearchView-Widget als in der App-Leiste öffnen.

Das Such-Widget bietet dieselben Funktionen wie das Suchdialogfeld. Es die entsprechende Aktivität startet, wenn der Nutzer eine Suche ausführt, und diese kann Suchvorschläge bereitstellen und eine Sprachsuche durchführen Wenn es keine Option für können Sie das Such-Widget in die App-Leiste einfügen, irgendwo in Ihrem Aktivitätslayout.

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

Such-Widget konfigurieren

Nach dem Erstellen einer Suchkonfiguration und ein durchsuchbare Aktivitäten, aktivieren Sie die unterstützte Suche. pro SearchView durch Aufrufen von setSearchableInfo(). und übergeben Sie das SearchableInfo-Objekt, das Ihr durchsuchbare Konfiguration.

Du kannst einen Verweis auf die SearchableInfo abrufen, indem du folgenden Befehl aufrufst: getSearchableInfo() am SearchManager

Wenn Sie z. B. eine SearchView als Aktionsansicht in App-Leiste aktivieren, aktivieren Sie das Widget onCreateOptionsMenu() hinzu, wie im folgenden Beispiel gezeigt:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // Inflate the options menu from XML.
    val inflater = menuInflater
    inflater.inflate(R.menu.options_menu, menu)

    // Get the SearchView and set the searchable configuration.
    val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
    (menu.findItem(R.id.menu_search).actionView as SearchView).apply {
        // Assumes current activity is the searchable activity.
        setSearchableInfo(searchManager.getSearchableInfo(componentName))
        setIconifiedByDefault(false) // Don't iconify the widget. Expand it by default.
    }

    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the options menu from XML.
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    // Get the SearchView and set the searchable configuration.
    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.menu_search).getActionView();
    // Assumes current activity is the searchable activity.
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconifiedByDefault(false); // Don't iconify the widget. Expand it by default.

    return true;
}

Das Such-Widget ist jetzt konfiguriert und das System liefert Suchanfragen Ihren Suchaktivitäten hinzufügen. Sie können auch Suchvorschläge für das Such-Widget

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

Weitere Informationen zu Aktionsansichten in der App-Leiste finden Sie unter Aktionsansichten und Aktionen verwenden Anbieter.

Weitere Funktionen des Such-Widgets

Das SearchView-Widget bietet einige zusätzliche Funktionen, interessieren könnte:

Schaltfläche „Senden“
Standardmäßig gibt es keine Schaltfläche zum Senden einer Suchanfrage, Drücken Sie die Eingabetaste auf der Tastatur, um die Suche zu starten. Ich können Sie ein „Senden“ indem Sie setSubmitButtonEnabled(true)
Verfeinerung der Suchanfrage für Suchvorschläge
Wenn Sie Suchvorschläge aktivieren, erwarten Sie in der Regel, dass Nutzer eine Sie möchten aber auch die vorgeschlagene Suchanfrage verfeinern. Sie können neben jedem Vorschlag eine Schaltfläche hinzufügen, über die der Vorschlag eingefügt wird in das Suchfeld zur Verfeinerung durch den Nutzer ein, indem er setQueryRefinementEnabled(true)
Die Möglichkeit, die Sichtbarkeit des Suchfelds ein-/auszuschalten
Standardmäßig ist das Such-Widget „iconified“ Das bedeutet, dass es die nur durch ein Suchsymbol – eine Lupe – dargestellt wird. Es wird zu das Suchfeld anzuzeigen, wenn Nutzende auf das Symbol tippen. Wie in den vorherigen können Sie das Suchfeld standardmäßig anzeigen, indem Sie setIconifiedByDefault(false) Sie können die Darstellung des Such-Widgets auch aktivieren, indem Sie folgenden Befehl aufrufen: setIconified()

Es gibt mehrere andere APIs in der Klasse SearchView, mit denen Sie passen Sie das Such-Widget an. Die meisten davon werden jedoch nur verwendet, alle Nutzereingaben selbst zu bearbeiten, anstatt das Android-System zu verwenden. und zeigen Suchvorschläge an.

Widget und Dialogfeld verwenden

Wenn Sie das Such-Widget in der App-Leiste Aktionsansicht aktivieren und wird er in der App-Leiste angezeigt, falls Platz vorhanden ist. Legen Sie dazu android:showAsAction="ifRoom" – dann kann das Such-Widget werden nicht als Aktionsansichten angezeigt. Stattdessen wird im Dreipunkt-Menü . Wenn Ihre App beispielsweise auf einem kleineren Bildschirm läuft, Sie haben genug Platz in der App-Leiste, um das Such-Widget und andere Aktionen anzuzeigen. oder Navigationselemente, sodass der Menüpunkt im Überlauf- . Wenn das Element im Dreipunkt-Menü platziert wird, funktioniert es wie ein gewöhnliches Menü Element und zeigt nicht die Aktionsansicht, d. h. das Such-Widget, an.

Um das zu vermeiden, muss der Menüpunkt, an den Sie das Such-Widget anhängen, muss das Suchdialogfeld aktivieren, wenn der Nutzer es im Dreipunkt-Menü auswählt. Implementieren Sie dazu onOptionsItemSelected() für die „Suche“ Menüpunkt und öffnen Sie das Suchfenster, indem Sie onSearchRequested().

Weitere Informationen zur Funktionsweise und Handhabung von Elementen in der App-Leiste Situation, siehe Fügen Sie die App-Leiste hinzu.

Sprachsuche hinzufügen

Sie können Ihrem Suchdialog oder -Widget eine Sprachsuche hinzufügen, indem Sie indem Sie das Attribut android:voiceSearchMode Konfiguration. Dadurch wird eine Schaltfläche für die Sprachsuche hinzugefügt, mit der eine Aufforderung gestartet wird. Nachdem der Nutzer zu Ende gesprochen hat, wird die transkribierte Suchanfrage an Ihren durchsuchbare Aktivitäten.

Dies wird im folgenden Beispiel gezeigt:

<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="@string/search_label"
    android:hint="@string/search_hint"
    android:voiceSearchMode="showVoiceSearchButton|launchRecognizer" >
</searchable>

Zur Aktivierung der Sprachausgabe ist der Wert showVoiceSearchButton erforderlich suchen. Der zweite Wert, launchRecognizer, gibt an, dass die die Schaltfläche für die Sprachsuche muss eine Erkennung starten, die den Fehlercode Text in die suchbare Aktivität übertragen.

Sie können zusätzliche Attribute angeben, um das Verhalten der Sprachsuche zu definieren, wie die erwartete Sprache und die maximale Anzahl der Ergebnisse, die zurückgegeben werden sollen. Weitere Informationen finden Sie unter finden Sie in der Referenz Suchkonfiguration Informationen zu den verfügbaren Attributen.

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

Suchvorschläge hinzufügen

Sowohl das Suchdialogfeld als auch das Such-Widget können Suchvorschläge anzeigen während der Nutzer tippt – mithilfe des Android-Systems. Das System verwaltet der Liste der Vorschläge und verarbeitet das Ereignis, wenn der Nutzer einen Vorschlag.

Sie können zwei Arten von Suchvorschlägen bereitstellen:

Letzte Vorschläge für Suchanfragen bei Suchanfragen
Diese Vorschläge sind Wörter, die der Nutzer zuvor als Suche verwendet hat Suchanfragen in Ihrer App. Weitere Informationen finden Sie unter Hinzufügen benutzerdefinierte Suchvorschläge.
Benutzerdefinierte Suchvorschläge
Das sind Suchvorschläge, die Sie aus Ihrer eigenen Datenquelle für damit Nutzer sofort die richtige Schreibweise oder das gesuchte Element auswählen können. für die Sie angegeben haben. Weitere Informationen finden Sie unter Benutzerdefinierte Suche hinzufügen finden Sie weitere Informationen.