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 StandardEditText
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.
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.
- Ein
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.
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.
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:
- Deklarieren Sie die Aktivität, um den Intent
ACTION_SEARCH
in einer<intent-filter>
-Elements. - 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.
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:
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 denSQLiteDatabase
. - 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 undProgressBar
finden Sie Informationen zum Anzeigen der Fortschrittsanzeige.
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.
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.
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 vononCreate()
. 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 IntentACTION_SEARCH
. durch einen Anruf beionNewIntent(Intent)
, und übergeben den neuen IntentACTION_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 sowohlonCreate()
undonNewIntent()
können sie ausführen.Wenn das System
onNewIntent(Intent)
aufruft, ist die Aktivität nicht neu gestartet, sodass dergetIntent()
gibt den mitonCreate()
empfangenen Intent zurück. Deshalb müssen SiesetIntent(Intent)
innerhalb vononNewIntent(Intent)
, damit der vom Die Aktivitäten werden für den Fall aktualisiert, dass SiegetIntent()
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); }
Such-Widget verwenden
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.