Suchkonfiguration

Compose ausprobieren
Jetpack Compose ist das empfohlene UI-Toolkit für Android. Hier erfahren Sie, wie Sie eine Suchfunktion in Compose hinzufügen.

Wenn Sie die Suche mit Unterstützung des Android-Systems implementieren möchten, d. h. Suchanfragen an eine Aktivität übergeben und Suchvorschläge bereitstellen möchten, muss Ihre Anwendung eine Suchkonfiguration in Form einer XML-Datei bereitstellen.

Auf dieser Seite wird die Suchkonfigurationsdatei in Bezug auf Syntax und Verwendung beschrieben. Weitere Informationen zum Implementieren von Suchfunktionen für Ihre Anwendung finden Sie unter Suchoberfläche erstellen.

Dateispeicherort:
res/xml/filename.xml
Unter Android wird der Dateiname als Ressourcen-ID verwendet.
Syntax:
<?xml version="1.0" encoding="utf-8"?>
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
    android:label="string resource"
    android:hint="string resource"
    android:searchMode=["queryRewriteFromData" | "queryRewriteFromText"]
    android:searchButtonText="string resource"
    android:inputType="inputType"
    android:imeOptions="imeOptions"
    android:searchSuggestAuthority="string"
    android:searchSuggestPath="string"
    android:searchSuggestSelection="string"
    android:searchSuggestIntentAction="string"
    android:searchSuggestIntentData="string"
    android:searchSuggestThreshold="int"
    android:includeInGlobalSearch=["true" | "false"]
    android:searchSettingsDescription="string resource"
    android:queryAfterZeroResults=["true" | "false"]
    android:voiceSearchMode=["showVoiceSearchButton" | "launchWebSearch" | "launchRecognizer"]
    android:voiceLanguageModel=["free-form" | "web_search"]
    android:voicePromptText="string resource"
    android:voiceLanguage="string"
    android:voiceMaxResults="int"
    >
    <actionkey
        android:keycode="KEYCODE"
        android:queryActionMsg="string"
        android:suggestActionMsg="string"
        android:suggestActionMsgColumn="string" />
</searchable>
Elemente:
<searchable>
Definiert alle Suchkonfigurationen, die vom Android-System für die unterstützte Suche verwendet werden.

Attribute:

android:label
String-Ressource: (Erforderlich.) Der Name Ihrer Anwendung. Er muss mit dem Namen übereinstimmen, der auf das android:label-Attribut des Manifestelements <activity> oder <application> angewendet wird. Dieses Label ist nur für den Nutzer sichtbar, wenn Sie android:includeInGlobalSearch auf "true" festlegen. In diesem Fall wird es verwendet, um Ihre Anwendung in den Sucheinstellungen des Systems als durchsuchbares Element zu identifizieren.
android:hint
String-Ressource: (Empfohlen) Der Text, der im Suchtextfeld angezeigt werden soll, wenn kein Text eingegeben wurde. Sie gibt dem Nutzer einen Hinweis darauf, welche Inhalte durchsucht werden können. Um die Konsistenz mit anderen Android-Anwendungen zu gewährleisten, formatieren Sie den String für android:hint als „Suche nach <content-or-product>“. Beispiele: „Suche nach Songs und Künstlern“ oder „Suche auf YouTube“.
android:searchMode
Keyword: Legt zusätzliche Modi fest, mit denen die Darstellung der Suche gesteuert wird. Die verfügbaren Modi definieren, wie der Abfragetext umgeschrieben werden muss, wenn ein benutzerdefinierter Vorschlag ausgewählt wird. Folgende Moduswerte sind zulässig:
WertBeschreibung
"queryRewriteFromData" Verwenden Sie den Wert aus der Spalte SUGGEST_COLUMN_INTENT_DATA, um den Bquery-Text neu zu schreiben. Dieser Parameter darf nur verwendet werden, wenn die Werte in SUGGEST_COLUMN_INTENT_DATA für die Nutzerprüfung und ‑bearbeitung geeignet sind, z. B. HTTP-URIs.
"queryRewriteFromText" Verwenden Sie den Wert aus der Spalte SUGGEST_COLUMN_TEXT_1, um den Abfragetext neu zu formulieren.

Weitere Informationen finden Sie in der Dokumentation zum Umschreiben des Abfragetexts unter Benutzerdefinierte Suchvorschläge hinzufügen.

android:searchButtonText
String-Ressource: Der Text, der auf der Schaltfläche zum Ausführen der Suche angezeigt wird. Standardmäßig wird auf der Schaltfläche ein Suchsymbol (eine Lupe) angezeigt, was ideal für die Internationalisierung ist. Verwenden Sie dieses Attribut also nicht, um die Schaltfläche zu ändern, es sei denn, das Verhalten ist etwas anderes als eine Suche, z. B. eine URL-Anfrage in einem Webbrowser.
android:inputType
Keyword: Definiert den Typ der zu verwendenden Eingabemethode, z. B. den Typ der Bildschirmtastatur. Bei den meisten Suchanfragen, bei denen Freiformtext erwartet wird, ist dieses Attribut nicht erforderlich. Eine Liste der geeigneten Werte für dieses Attribut finden Sie unter inputType.
android:imeOptions
Keyword: Bietet zusätzliche Optionen für die Eingabemethode. Bei den meisten Suchanfragen, bei denen Freiformtext erwartet wird, ist dieses Attribut nicht erforderlich. Die Standard-IME ist actionSearch. Auf der Bildschirmtastatur wird dann die Schaltfläche „Suchen“ anstelle eines Zeilenumbruchs angezeigt. Eine Liste der geeigneten Werte für dieses Attribut finden Sie unter imeOptions.

Attribute von Suchvorschlägen

Wenn Sie einen Contentanbieter zum Generieren von Suchvorschlägen definieren, müssen Sie zusätzliche Attribute definieren, mit denen die Kommunikation mit dem Contentanbieter konfiguriert wird. Wenn Sie Suchvorschläge bereitstellen, benötigen Sie einige der folgenden <searchable>-Attribute:


android:searchSuggestAuthority
String (Erforderlich für Suchvorschläge) Dieser Wert muss mit dem Authority-String übereinstimmen, der im Attribut android:authorities des Android-Manifestelements <provider> angegeben ist.
android:searchSuggestPath
String Dieser Pfad wird als Teil der Vorschlagsanfrage Uri verwendet, nach dem Präfix und der Autorität und vor dem Standardvorschlagspfad. Dies ist nur erforderlich, wenn ein einzelner Contentanbieter verschiedene Arten von Vorschlägen ausgibt, z. B. für verschiedene Datentypen, und Sie eine Möglichkeit benötigen, die Vorschlagsanfragen zu disambiguieren, wenn Sie sie erhalten.
android:searchSuggestSelection
String Dieser Wert wird als Parameter selection an Ihre Abfragefunktion übergeben. In der Regel ist das eine WHERE-Klausel für Ihre Datenbank, die ein einzelnes Fragezeichen als Platzhalter für den vom Nutzer eingegebenen tatsächlichen Abfragestring enthalten muss, z. B. "query=?". Sie können jedoch auch einen beliebigen Wert ungleich null verwenden, um die Bereitstellung des Abfragetexts mit dem Parameter selectionArgs auszulösen und den Parameter selection dann zu ignorieren.
android:searchSuggestIntentAction
String Die Standard-Intent-Aktion, die verwendet werden soll, wenn ein Nutzer auf einen benutzerdefinierten Suchvorschlag tippt, z. B. "android.intent.action.VIEW". Wenn dieser Wert nicht durch den ausgewählten Vorschlag in der Spalte SUGGEST_COLUMN_INTENT_ACTION überschrieben wird, wird er in das Aktionsfeld von Intent eingefügt, wenn der Nutzer auf einen Vorschlag tippt.
android:searchSuggestIntentData
String Die Standard-Intent-Daten, die verwendet werden, wenn ein Nutzer auf einen benutzerdefinierten Suchvorschlag tippt. Wenn dieser Wert nicht durch den ausgewählten Vorschlag überschrieben wird (über die Spalte SUGGEST_COLUMN_INTENT_DATA), wird er in das Datenfeld des Intent eingefügt, wenn der Nutzer auf einen Vorschlag tippt.
android:searchSuggestThreshold
Ganzzahl Die Mindestanzahl an Zeichen, die erforderlich ist, um eine Vorschlagsuche auszulösen. Dadurch wird nur sichergestellt, dass das System Ihren Contentanbieter nicht nach Inhalten abfragt, die kürzer als der Schwellenwert sind. Der Standardwert ist 0.

Weitere Informationen zu den oben genannten Attributen für Suchvorschläge finden Sie in der Dokumentation zum Hinzufügen benutzerdefinierter Suchvorschläge und zum Hinzufügen benutzerdefinierter Vorschläge.

Attribute des Schnellsuche-Felds

Damit Ihre benutzerdefinierten Suchvorschläge im Schnellsuchefeld verfügbar sind, benötigen Sie einige der folgenden <searchable>-Attribute:


android:includeInGlobalSearch
Boolesch. (Erforderlich, um Suchvorschläge im Schnellsuchfeld bereitzustellen.) Legen Sie "true" fest, wenn Ihre Vorschläge im global zugänglichen Schnellsuchefeld enthalten sein sollen. Der Nutzer muss Ihre Anwendung weiterhin in den Systemeinstellungen der Suche als durchsuchbares Element aktivieren, bevor Ihre Vorschläge im Schnellzugriffsfeld angezeigt werden.
android:searchSettingsDescription
String-Ressource: Hier können Sie eine kurze Beschreibung der Suchvorschläge angeben, die Sie für das Schnellsuche-Feld bereitstellen. Diese Beschreibung wird im Eintrag für durchsuchbare Elemente für Ihre Anwendung angezeigt. In der Beschreibung muss der suchbare Inhalt prägnant beschrieben werden. Beispiele: „Künstler, Alben und Titel“ für eine Musik-App oder „Gespeicherte Notizen“ für eine Notizblock-App.
android:queryAfterZeroResults
Boolesch. Legen Sie "true" fest, wenn Ihr Content-Anbieter für Obermengen von Anfragen aufgerufen werden soll, für die zuvor keine Ergebnisse zurückgegeben wurden. Wenn Ihr Contentanbieter beispielsweise keine Ergebnisse für „bo“ zurückgibt, muss die Anfrage für „bob“ wiederholt werden. Wenn der Wert auf "false" gesetzt ist, werden Obermengen für eine einzelne Sitzung ignoriert. „bob“ löst keine erneute Anfrage aus. Dies gilt nur für die Dauer des Suchdialogfelds oder der Aktivität, wenn das Such-Widget verwendet wird. Wenn das Suchdialogfeld oder die Aktivität wieder geöffnet wird, fragt „bo“ Ihren Contentanbieter noch einmal ab. Der Standardwert ist "false".

Attribute für die Sprachsuche

Damit die Sprachsuche funktioniert, benötigen Sie einige der folgenden <searchable>-Attribute:


android:voiceSearchMode
Keyword: (Erforderlich, um die Sprachsuche zu ermöglichen.) Ermöglicht die Sprachsuche mit einem speziellen Modus für die Sprachsuche. Die Sprachsuche wird möglicherweise nicht vom Gerät bereitgestellt. In diesem Fall haben diese Flags keine Auswirkungen. Folgende Moduswerte sind zulässig:
WertBeschreibung
"showVoiceSearchButton" Zeigen Sie eine Schaltfläche für die Sprachsuche an, wenn die Sprachsuche auf dem Gerät verfügbar ist. Wenn festgelegt, muss auch entweder "launchWebSearch" oder "launchRecognizer" festgelegt werden, getrennt durch das Pipe-Zeichen (|).
"launchWebSearch" Über die Schaltfläche für die Sprachsuche wird der Nutzer direkt zu einer integrierten Web-Sprachsuche weitergeleitet. Die meisten Anwendungen verwenden dieses Flag nicht, da der Nutzer dadurch von der Aktivität, in der die Suche aufgerufen wurde, weggeleitet wird.
"launchRecognizer" Über die Schaltfläche für die Sprachsuche wird der Nutzer direkt zu einer integrierten Sprachaufzeichnungsaktivität weitergeleitet. Bei dieser Aktivität wird der Nutzer aufgefordert, etwas zu sagen. Der gesprochene Text wird transkribiert und der resultierende Suchanfragetext wird an die durchsuchbare Aktivität weitergeleitet, so als hätte der Nutzer ihn in die Suchoberfläche eingegeben und auf die Schaltfläche „Suchen“ getippt.
android:voiceLanguageModel
Keyword: Das Sprachmodell, das vom Spracherkennungssystem verwendet werden muss. Folgende Werte sind zulässig:
WertBeschreibung
"free_form" Verwenden Sie die Spracherkennung im freien Format, um Suchanfragen zu diktieren. Die Funktion ist hauptsächlich für Englisch optimiert. Das ist die Standardeinstellung.
"web_search" Verwenden Sie die Erkennung von Websuchbegriffen für kürzere, suchähnliche Formulierungen. Diese Funktion ist in mehr Sprachen als "free_form" verfügbar.

Weitere Informationen finden Sie unter EXTRA_LANGUAGE_MODEL.

android:voicePromptText
String-Ressource: Eine zusätzliche Nachricht, die im Dialogfeld für die Spracheingabe angezeigt werden soll.
android:voiceLanguage
String Die erwartete gesprochene Sprache, ausgedrückt als Stringwert einer Konstanten in Locale, z. B. "de" für Deutsch oder "fr" für Französisch. Dies ist nur erforderlich, wenn sich der Wert von Locale.getDefault() ändert.
android:voiceMaxResults
Ganzzahl Legt die maximale Anzahl der zurückzugebenden Ergebnisse fest, einschließlich des „besten“ Ergebnisses, das immer als primäre Abfrage des ACTION_SEARCH-Intents angegeben wird. Muss mindestens 1 sein. Verwenden Sie EXTRA_RESULTS, um die Ergebnisse des Intents abzurufen. Wenn nicht angegeben, wählt die Erkennung aus, wie viele Ergebnisse zurückgegeben werden sollen.
<actionkey>
Definiert einen Geräteschlüssel und das Verhalten für eine Suchaktion. Eine Suchaktion bietet ein spezielles Verhalten, wenn auf dem Gerät eine Schaltfläche angetippt wird, basierend auf der aktuellen Anfrage oder dem fokussierten Vorschlag. Die Kontakte App bietet beispielsweise eine Suchaktion, um einen Anruf an den aktuell fokussierten Kontaktvorschlag zu starten, wenn auf die Schaltfläche „ANRUFEN“ getippt wird.

Nicht alle Aktionsschlüssel sind auf jedem Gerät verfügbar und nicht alle Schlüssel können auf diese Weise überschrieben werden. Beispielsweise kann die „Home“-Taste nicht überschrieben werden und muss immer zum Startbildschirm zurückkehren. Außerdem sollten Sie keine Aktionstaste für eine Taste definieren, die zum Eingeben einer Suchanfrage benötigt wird. Dadurch werden die verfügbaren und sinnvollen Aktionsschlüssel auf die Anrufschaltfläche und die Menüschaltfläche beschränkt.

Sie müssen android:keycode definieren, um den Schlüssel festzulegen, und mindestens eines der anderen drei Attribute, um die Suchaktion zu definieren.

Attribute:

android:keycode
String (Erforderlich.) Ein Tastencode aus KeyEvent, der die Aktionstaste darstellt, auf die Sie reagieren möchten, z. B. "KEYCODE_CALL". Dieser wird dem ACTION_SEARCH-Intent hinzugefügt, der an Ihre durchsuchbare Aktivität übergeben wird. Verwenden Sie getIntExtra(SearchManager.ACTION_KEY), um den Schlüsselcode zu prüfen. Nicht alle Tasten werden für eine Suchaktion unterstützt, da viele von ihnen für die Eingabe, Navigation oder Systemfunktionen verwendet werden.
android:queryActionMsg
String Eine Aktionsnachricht, die gesendet werden soll, wenn die Aktionstaste gedrückt wird, während der Nutzer Abfragetext eingibt. Dieser wird dem ACTION_SEARCH-Intent hinzugefügt, den das System an Ihre durchsuchbare Aktivität übergibt. Verwenden Sie getStringExtra(SearchManager.ACTION_MSG), um den String zu untersuchen.
android:suggestActionMsg
String Eine Aktionsnachricht, die gesendet werden soll, wenn die Aktionstaste gedrückt wird, während der Fokus auf einem Vorschlag liegt. Dieser wird dem Intent hinzugefügt, den das System an Ihre durchsuchbare Aktivität übergibt. Dabei wird die Aktion verwendet, die Sie für den Vorschlag definieren. Verwenden Sie getStringExtra(SearchManager.ACTION_MSG), um den String zu untersuchen. Diese Option darf nur verwendet werden, wenn alle Vorschläge diese Aktionstaste unterstützen. Wenn nicht alle Vorschläge denselben Aktionsschlüssel verarbeiten können, müssen Sie stattdessen das folgende android:suggestActionMsgColumn-Attribut verwenden.
android:suggestActionMsgColumn
String Der Name der Spalte in Ihrem Contentanbieter, die die Aktionsnachricht für diesen Aktionsschlüssel definiert. Sie wird gesendet, wenn der Nutzer den Aktionsschlüssel drückt, während eine Empfehlung im Fokus ist. Mit diesem Attribut können Sie den Aktionsschlüssel für jede Empfehlung einzeln festlegen. Anstatt das Attribut android:suggestActionMsg zu verwenden, um die Aktionsnachricht für alle Empfehlungen zu definieren, enthält jeder Eintrag in Ihrem Content-Provider eine eigene Aktionsnachricht.

Zuerst müssen Sie in Ihrem Content-Anbieter eine Spalte für jeden Vorschlag definieren, für den eine Aktionsnachricht bereitgestellt werden soll. Geben Sie dann den Namen dieser Spalte in diesem Attribut an. Das System betrachtet den Vorschlagscursor, verwendet den hier angegebenen String, um die Spalte für die Aktionsmeldung auszuwählen, und wählt dann den String für die Aktionsmeldung aus dem Cursor aus. Dieser String wird dem Intent hinzugefügt, den das System an Ihre durchsuchbare Aktivität übergibt. Dabei wird die Aktion verwendet, die Sie für Vorschläge definieren. Verwenden Sie getStringExtra(SearchManager.ACTION_MSG), um den String zu untersuchen. Wenn die Daten für den ausgewählten Vorschlag nicht vorhanden sind, wird der Aktionsschlüssel ignoriert.

Beispiel:
XML-Datei unter res/xml/searchable.xml gespeichert:
<?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:searchSuggestAuthority="dictionary"
    android:searchSuggestIntentAction="android.intent.action.VIEW"
    android:includeInGlobalSearch="true"
    android:searchSettingsDescription="@string/settings_description" >
</searchable>