Lorsque vous êtes prêt à ajouter une fonctionnalité de recherche à votre application, Android vous aide implémenter l'interface utilisateur via une boîte de dialogue de recherche qui s'affiche en haut de la fenêtre de l'activité ou un widget de recherche que vous pouvez insérer dans votre mise en page. La boîte de dialogue de recherche et le widget peuvent transmettre la requête de recherche de l'utilisateur à un une activité spécifique dans votre application. Ainsi, l'utilisateur peut lancer une recherche depuis n'importe quel activité lorsque la boîte de dialogue ou le widget de recherche est disponible, et que le système démarre l'activité appropriée pour effectuer la recherche et présenter les résultats.
D'autres fonctionnalités sont disponibles pour la boîte de dialogue de recherche et le widget:
- Recherche vocale
- Suggestions de recherche basées sur les requêtes récentes
- Suggestions de recherche correspondant aux résultats réels dans les données de votre application
Ce document explique comment configurer votre application pour fournir une interface de recherche qui est assisté par le système Android pour fournir des requêtes de recherche, en utilisant : la boîte de dialogue de recherche ou le widget Recherche.
Ressources associées :
Principes de base
Avant de commencer, décidez si vous souhaitez implémenter votre interface de recherche à l'aide de la boîte de dialogue ou du widget Recherche. Elles permettent d'effectuer les mêmes recherches caractéristiques, mais de manière légèrement différente:
- La boîte de dialogue de recherche est un composant d'interface utilisateur contrôlé par
le système Android. Lorsqu'elle est activée par l'utilisateur, la boîte de dialogue de recherche s'affiche à l'adresse
en haut de l’activité.
Le système Android contrôle tous les événements de la boîte de dialogue de recherche. Lorsque lorsque l'utilisateur soumet une requête, le système la transmet à l'activité que vous spécifiez pour gérer les recherches. La boîte de dialogue peut aussi fournir des options de recherche suggestions pendant la saisie par l'utilisateur.
- Le widget Recherche est une instance de
SearchView
que vous pouvez n'importe où dans votre mise en page. Par défaut, le widget Recherche se comporte comme un standardEditText
et ne fait rien, mais vous pouvez le configurer de sorte qu'Android gère tous les événements d'entrée, envoie des requêtes au activité et des suggestions de recherche, .
Lorsque l'utilisateur effectue une recherche
à partir de la boîte de dialogue de recherche ou d'un widget de recherche,
le système crée
Intent
et
stocke la requête
de l'utilisateur dans celui-ci. Le système lance ensuite l'activité que vous
déclarer pour gérer les recherches (l'"activité de recherche") et la diffuser ;
l'intent. Pour configurer votre application pour ce type de recherche assistée, vous devez disposer du
suivantes:
- Une configuration de recherche
- Fichier XML qui configure certains paramètres de la boîte de dialogue ou du widget de recherche. Il inclut des paramètres pour des fonctionnalités telles que la recherche vocale, les suggestions de recherche, et des indications pour le champ de recherche.
- Une activité avec recherche
- Le
Activity
qui reçoit la requête de recherche, effectue des recherches dans vos données et affiche les résultats résultats.- Interface de recherche, fournie par l'un des systèmes suivants:
- Boîte de dialogue de recherche
- Par défaut, la boîte de dialogue de recherche est masquée. Il s'affiche en haut l'écran lorsque vous appelez
onSearchRequested()
Lorsque l'utilisateur appuie sur votre bouton Rechercher.SearchView
widget- Le widget Recherche vous permet de placer le champ de recherche n'importe où dans votre activité, y compris en tant que vue d'action dans la barre d'application.
Le reste de ce document explique comment créer la configuration de recherche et de recherche, et comment implémenter une interface de recherche à l'aide du la boîte de dialogue de recherche ou le widget de recherche.
Créer une configuration incluse dans l'index de recherche
Vous avez d'abord besoin d'un fichier XML
configuration de recherche.
Il configure certains aspects de l'interface utilisateur de la boîte de dialogue ou du widget de recherche, et définit la manière dont
des fonctionnalités telles que les suggestions et la recherche vocale. Ce fichier est généralement
nommé searchable.xml
et doit être enregistré dans res/xml/
dans le répertoire du projet.
Le fichier de configuration de recherche doit inclure le paramètre
<searchable>
comme nœud racine et spécifiez un ou plusieurs attributs, comme indiqué dans la
l'exemple suivant:
<?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>
L'attribut android:label
est le seul attribut obligatoire. Il
pointe vers une ressource de chaîne, qui doit être le nom de l'application. Ce libellé n'est pas
visible par l'utilisateur jusqu'à ce que vous activiez les suggestions de recherche pour le champ de recherche rapide, à l'adresse
L'endroit où le libellé est visible dans la liste des éléments inclus dans l'index de recherche du système
paramètres.
Bien que cela ne soit pas obligatoire, nous vous recommandons de toujours inclure le paramètre
L'attribut android:hint
, qui fournit une chaîne d'indice dans la recherche
avant que les utilisateurs ne saisissent une requête. L'indice est important
car il fournit
des indices importants aux utilisateurs
sur ce qu'ils peuvent rechercher.
L'élément <searchable>
accepte plusieurs autres attributs.
Cependant, vous n'avez pas besoin de la plupart des attributs tant que vous n'avez pas ajouté d'éléments géographiques tels que
suggestions de recherche et
recherche vocale. Pour en savoir plus sur la
de configuration de recherche, consultez la
Configuration de la recherche
document de référence.
Créer une activité avec recherche
Une activité interrogeable est le Activity
de votre application qui effectue
effectue des recherches en fonction d'une chaîne de requête et présente les résultats de la recherche.
Lorsque l'utilisateur effectue une recherche dans la boîte de dialogue ou le widget de recherche, le système
démarre votre activité de recherche et renvoie la requête de recherche dans un
Intent
avec le
ACTION_SEARCH
action. L'activité de recherche récupère la requête à partir du répertoire
QUERY
supplémentaire, puis recherche vos données et présente les résultats.
Comme vous pouvez inclure la boîte de dialogue ou le widget de recherche dans n'importe quelle autre activité dans votre application, le système doit savoir quelle activité correspond à votre activité de recherche. pour qu'il puisse diffuser correctement la requête de recherche. Commencez par déclarer votre propriété interrogeable dans le fichier manifeste Android.
Déclarer une activité interrogeable
Si vous n'en avez pas encore, créez un Activity
qui effectue
et présente des résultats. Il n'est pas nécessaire d'implémenter la fonction de recherche
il vous suffit de créer une activité que vous pourrez déclarer dans le
fichier manifeste. Dans le fichier manifeste
<activity>
, procédez comme suit:
- Déclarez l'activité pour accepter l'intent
ACTION_SEARCH
dans une<intent-filter>
. - Spécifiez la configuration de recherche à utiliser dans un
<meta-data>
.
Ce processus est illustré dans l'exemple suivant :
<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>
L'élément <meta-data>
doit inclure le paramètre
Attribut android:name
avec la valeur
"android.app.searchable"
et le android:resource
avec une référence au fichier de configuration inclus dans l'index de recherche. Dans
l'exemple précédent, il fait référence à res/xml/searchable.xml
.
Effectuer une recherche
Après avoir déclaré votre activité de recherche dans le fichier manifeste, procédez comme suit : pour effectuer une recherche dans votre activité de recherche:
Recevoir la requête
Lorsqu'un utilisateur effectue une recherche à partir de la boîte de dialogue ou du widget de recherche, le système
démarre votre activité de recherche et lui envoie un ACTION_SEARCH
l'intention. Cet intent contient la requête de recherche dans la chaîne QUERY
.
supplémentaires. Recherchez cet intent au début de l'activité et extrayez la chaîne.
Par exemple, voici comment obtenir une requête de recherche
début de l'activité:
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); } }
La chaîne QUERY
est toujours incluse avec le paramètre
Intent ACTION_SEARCH
. Dans l'exemple précédent, la requête est
récupérée et transmise à une méthode doMySearch()
locale, où
l'opération de recherche réelle est effectuée.
Rechercher dans vos données
Le processus de stockage et de recherche de vos données est propre à votre application. Vous pouvez stocker et rechercher vos données de différentes manières, et ce document ne vous montre pas comment faire. Réfléchissez à la manière dont vous stockez et recherchez vos données en fonction de vos besoins et de vos données . Voici quelques conseils que vous pouvez appliquer:
- Si vos données sont stockées dans une base de données SQLite sur l'appareil, effectuer une
Recherche en texte intégral (avec FTS3 au lieu d'un
LIKE
) peut permettre d'effectuer une recherche plus efficace dans les données textuelles et des résultats beaucoup plus rapidement. Voir sqlite.org pour des informations sur FTS3 etSQLiteDatabase
pour obtenir des informations sur SQLite sur Android. - Si vos données sont stockées en ligne, les performances de recherche perçues peuvent
par la connexion de données de l'utilisateur. Il se peut que vous souhaitiez afficher
indicateur de progression jusqu'à ce que la recherche s'affiche. Voir
android.net
pour découvrir les API réseauProgressBar
pour savoir comment afficher un indicateur de progression.
Présenter les résultats
Quel que soit l'endroit où se trouvent vos données et la façon dont vous les recherchez, nous vous recommandons
vous renvoyez des résultats de recherche à votre activité de recherche à l'aide d'une
Adapter
Ce
vous pouvez présenter tous les résultats de recherche
RecyclerView
Si vos données proviennent d'une requête de base de données SQLite, vous pouvez appliquer vos résultats
RecyclerView
à l'aide d'un
CursorAdapter
Si vos données se présentent dans un format différent, vous pouvez alors créer une extension de
BaseAdapter
Un Adapter
associe chaque élément d'un ensemble de données à un
View
. Quand ?
l'élément Adapter
est appliqué à une RecyclerView
, chaque pièce
est insérée en tant que vue individuelle dans la liste. Adapter
correspond à
juste une interface, donc des implémentations telles que
CursorAdapter
, pour lier les données d'un
Cursor
– sont
nécessaires. Si aucune des implémentations existantes ne fonctionne pour vos données, vous pouvez
implémenter la vôtre à partir de BaseAdapter
.
Utiliser la boîte de dialogue de recherche
La boîte de dialogue de recherche contient un champ de recherche flottant en haut de l'écran, avec l'icône de l'application sur la gauche. La boîte de dialogue de recherche peut fournir des suggestions de recherche au fur et à mesure de la saisie de l'utilisateur. Lorsque l'utilisateur effectue une recherche, le système envoie la requête à une activité interrogeable qui effectue la recherche.
Par défaut, la boîte de dialogue de recherche est toujours masquée jusqu'à ce que l'utilisateur l'active.
Votre application peut activer la boîte de dialogue de recherche en appelant
onSearchRequested()
Toutefois, pour que cette méthode fonctionne,
activer la boîte de dialogue de recherche pour l'activité.
Pour permettre à la boîte de dialogue de recherche d'effectuer des recherches, indiquez au système les
L'activité de recherche doit recevoir des requêtes de recherche provenant de la boîte de dialogue de recherche. Pour
dans la section précédente sur
création d'une activité avec recherche, une fonction
l'activité nommée SearchableActivity
a été créée. Si vous souhaitez
une activité distincte, telle que celle nommée OtherActivity
, pour afficher
une boîte de dialogue de recherche et envoyer des recherches à SearchableActivity
, déclarez
dans le fichier manifeste, que SearchableActivity
correspond à l'activité interrogeable ;
à utiliser pour la boîte de dialogue de recherche dans OtherActivity
.
Pour déclarer l'activité de recherche dans la boîte de dialogue de recherche d'une activité, ajoutez un
l'élément <meta-data>
dans les
Élément <activity>
. <meta-data>
doit inclure l'attribut android:value
qui spécifie le
Nom de classe de l'activité de recherche et attribut android:name
avec la valeur "android.app.default_searchable"
.
Par exemple, voici la déclaration pour une activité interrogeable,
SearchableActivity
et une autre activité,
OtherActivity
, qui utilise SearchableActivity
pour
effectuer des recherches exécutées depuis sa boîte de dialogue de recherche:
<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>
Étant donné que OtherActivity
inclut désormais un
Élément <meta-data>
pour déclarer l'activité interrogeable à
pour les recherches, l'activité active la boîte de dialogue de recherche. Bien que l'utilisateur soit
Dans cette activité, la méthode onSearchRequested()
active
boîte de dialogue de recherche. Lorsque l'utilisateur effectue la recherche, le système démarre
SearchableActivity
et le diffuse le ACTION_SEARCH
l'intention.
Si vous souhaitez que chaque activité de votre application affiche la boîte de dialogue de recherche, insérez
l'élément <meta-data>
précédent en tant qu'enfant de la
<application>
au lieu de chaque <activity>
. De cette façon, chaque activité
hérite de la valeur, fournit la boîte de dialogue de recherche et transmet les recherches au
même activité de recherche. Si vous avez plusieurs activités de recherche, vous pouvez
peuvent remplacer l'activité de recherche par défaut en plaçant
Déclaration <meta-data>
à l'intérieur d'activités individuelles.
La boîte de dialogue de recherche étant désormais activée pour vos activités, votre application est prête à d'effectuer des recherches.
Appeler la boîte de dialogue de recherche
Bien que certains appareils disposent d'un bouton de recherche dédié, le comportement du
peut varier d'un appareil à l'autre, et de nombreux appareils n'offrent pas de fonctionnalité de recherche
sur le bouton. Lorsque vous utilisez la boîte de dialogue de recherche, vous devez fournir un bouton de recherche
dans votre interface utilisateur qui active la boîte de dialogue de recherche en appelant
onSearchRequested()
Par exemple, ajoutez un bouton de recherche dans votre
Menu d'options ou mise en page de l'interface utilisateur
qui appelle onSearchRequested()
.
Vous pouvez également activer l'option "Saisir pour rechercher" qui active
boîte de dialogue de recherche lorsque l'utilisateur
commence à taper sur le clavier. Les combinaisons de touches
inséré dans la boîte de dialogue de recherche. Vous pouvez activer la saisie semi-automatique dans votre activité
en appelant
setDefaultKeyMode
ou
DEFAULT_KEYS_SEARCH_LOCAL
– pendant
de votre activité
onCreate()
.
Impact de la boîte de dialogue de recherche sur le cycle de vie de votre activité
La boîte de dialogue de recherche
Dialog
qui flotte
en haut de l'écran. Comme cela n'entraîne aucun changement dans la pile d'activités,
lorsque la boîte de dialogue de recherche apparaît, aucune méthode de cycle de vie (comme
onPause()
– sont
appelé. Votre activité perd le ciblage des entrées utilisateur, car cette priorité est attribuée à
boîte de dialogue de recherche.
Si vous souhaitez être averti lorsque la boîte de dialogue de recherche est activée, remplacez
onSearchRequested()
. Lorsque le système appelle cette méthode,
indique que votre activité perd son focus dans la boîte de dialogue de recherche.
vous pouvez effectuer n'importe quelle tâche adaptée à l'événement, comme mettre un match en pause. À moins que
vous transmettez le contexte de recherche
données (traitées dans une autre section de ce document), terminez la
en appelant l'implémentation de la super-classe:
Kotlin
override fun onSearchRequested(): Boolean { pauseSomeStuff() return super.onSearchRequested() }
Java
@Override public boolean onSearchRequested() { pauseSomeStuff(); return super.onSearchRequested(); }
Si l'utilisateur annule la recherche en appuyant sur le bouton Retour, la boîte de dialogue de recherche
se ferme et l'activité retrouve le focus de saisie. Vous pouvez vous inscrire pour recevoir une notification
lorsque la boîte de dialogue de recherche est fermée avec
setOnDismissListener()
,
setOnCancelListener()
,
ou les deux. Il vous suffit d'enregistrer
OnDismissListener
,
car il est appelé à chaque fois
que la boîte de dialogue de recherche se ferme. La
OnCancelListener
concerne uniquement les événements dans lesquels l'utilisateur quitte explicitement la boîte de dialogue de recherche. Par conséquent,
il n'est pas appelé lorsqu'une recherche est exécutée. Lorsque la recherche est exécutée, la
la boîte de dialogue de recherche disparaît automatiquement.
Si l'activité en cours ne fait pas partie de l'activité de recherche, l'activité
les événements du cycle de vie d'une activité sont déclenchés lorsque l'utilisateur exécute
recherche : l'activité en cours reçoit onPause()
, comme décrit ci-dessus.
dans l'Introduction aux
activités. Toutefois, si l'activité actuelle est l'activité de recherche,
l'une des deux situations suivantes se produit:
- Par défaut, l'activité de recherche reçoit le paramètre
l'intent
ACTION_SEARCH
avec un appel àonCreate()
; et une nouvelle instance de l'activité est placée en haut de l'activité. pile. Il y a désormais deux instances de votre activité de recherche dans le la pile d'activités. Par conséquent, appuyez sur le bouton "Retour" pour revenir à l'activité précédente instance de l'activité interrogeable, au lieu de quitter le moteur de recherche activité. - Si vous définissez
android:launchMode
sur"singleTop"
, l'activité interrogeable reçoit alors l'intentACTION_SEARCH
; en appelant leonNewIntent(Intent)
, en transmettant le nouvel intentACTION_SEARCH
. Par exemple, voici comment vous pourriez gérer ce cas, dans lequel le mode de lancement de l'activité interrogeable est"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); } }
Par rapport à l'exemple de code de la section effectuant une recherche, tout le code nécessaire pour gérer l'intention de recherche se trouve maintenant dans la méthode
handleIntent()
.onCreate()
etonNewIntent()
peuvent l'exécuter.Lorsque le système appelle
onNewIntent(Intent)
, l'activité n'est pas redémarré, donc legetIntent()
renvoie le même intent que celui reçu aveconCreate()
. C'est pourquoi vous devez appelersetIntent(Intent)
dansonNewIntent(Intent)
, de sorte que l'intent enregistré par activité est mise à jour au cas où vous appelleriezgetIntent()
à l'avenir.
Le deuxième scénario, qui utilise le mode de lancement "singleTop"
, est généralement
car après une recherche, l'utilisateur peut effectuer des actions
et que votre application ne doit pas créer plusieurs instances du
activité de recherche. Nous vous recommandons de définir votre activité de recherche sur
"singleTop"
dans le fichier manifeste de l'application, comme indiqué dans les
l'exemple suivant:
<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>
Transmettre des données de contexte de recherche
Dans certains cas, vous pouvez affiner la requête de recherche à l'intérieur
l'activité de recherche pour chaque recherche effectuée. Toutefois, si vous souhaitez affiner
vos critères de recherche en fonction de l'activité à partir de laquelle l'utilisateur effectue
vous pouvez fournir des données supplémentaires dans l'intent que le système envoie
votre activité de recherche. Vous pouvez transmettre les données supplémentaires
APP_DATA
Bundle
, qui est
inclus dans l'intent ACTION_SEARCH
.
Pour transmettre ce type de données à votre activité de recherche, remplacez
Méthode onSearchRequested()
pour l'activité à partir de laquelle l'utilisateur peut
effectuer une recherche, créer un Bundle
avec les données supplémentaires ;
appel
startSearch()
pour activer la boîte de dialogue de recherche. Exemple :
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; }
Renvoyer la valeur "true" indique que vous gérez correctement cet événement de rappel et
appelez startSearch()
pour activer la boîte de dialogue de recherche. Une fois que l’utilisateur
envoie une requête, celle-ci est transmise à votre activité de recherche avec les données
que vous ajoutez. Vous pouvez extraire les données supplémentaires de APP_DATA
.
Bundle
pour affiner la recherche, comme illustré dans l'exemple suivant:
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); }
Utiliser le widget Recherche
Le widget Recherche offre les mêmes fonctionnalités que la boîte de dialogue de recherche. Il lance l'activité appropriée lorsque l'utilisateur effectue une recherche et peut proposer des suggestions de recherche et effectuer une recherche vocale. Si ce n'est pas une option pour placer le widget Recherche dans la barre d'application, vous pouvez saisir à la place le champ de recherche quelque part dans la mise en page de votre activité.
<ph type="x-smartling-placeholder">Configurer le widget Recherche
Après avoir créé un
configuration de recherche et un
activité de recherche, activez la recherche assistée
pour chaque SearchView
en appelant
setSearchableInfo()
et en lui transmettant l'objet SearchableInfo
qui représente
et la configuration avec l'index de recherche.
Vous pouvez obtenir une référence à SearchableInfo
en appelant
getSearchableInfo()
sur
SearchManager
Par exemple, si vous utilisez un SearchView
en tant que vue d'action dans
la barre d'application, activez le widget
onCreateOptionsMenu()
, comme illustré dans l'exemple suivant:
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; }
Le widget Recherche est maintenant configuré et le système fournit les requêtes de recherche à votre activité de recherche. Vous pouvez également activer suggestions de recherche pour le widget Recherche.
<ph type="x-smartling-placeholder">Pour en savoir plus sur les vues d'action dans la barre d'application, consultez Utilisez des vues et des actions fournisseurs.
Autres fonctionnalités du widget Recherche
Le widget SearchView
offre quelques fonctionnalités supplémentaires
pourrait vouloir:
- Un bouton "Envoyer"
- Par défaut, aucun bouton ne permet de soumettre une requête de recherche. L'utilisateur doit donc
appuyez sur la touche Retour du clavier pour lancer une recherche. Toi
pouvez ajouter
un bouton « envoyer » bouton en appelant
setSubmitButtonEnabled(true)
- Affinement des requêtes pour les suggestions de recherche
- Lorsque vous activez les suggestions de recherche, vous vous attendez généralement à ce que les utilisateurs sélectionnent un
mais il peut être amené à affiner la requête de recherche suggérée.
Vous pouvez ajouter un bouton à côté de chaque suggestion pour l'insérer
dans le champ de recherche afin d'être affiné par l'utilisateur en appelant
setQueryRefinementEnabled(true)
- Possibilité d'activer ou de désactiver la visibilité du champ de recherche
- Par défaut, le widget Recherche est "iconifié". ce qui signifie qu'il est
représentées uniquement par une icône de recherche (une loupe). Elle se développe en
afficher le champ de recherche lorsque l'utilisateur appuie sur l'icône. Comme indiqué
exemple, vous pouvez afficher le champ de recherche par défaut en appelant
setIconifiedByDefault(false)
Vous pouvez également modifier l'apparence du widget Recherche en appelantsetIconified()
Plusieurs autres API de la classe SearchView
permettent
de personnaliser le widget Recherche. Cependant, la plupart d'entre eux ne sont
utilisés que lorsque vous
gérer vous-même toutes les entrées utilisateur, au lieu d'utiliser le système Android pour fournir
des requêtes de recherche et afficher des suggestions de recherche.
Utiliser le widget et la boîte de dialogue
Si vous insérez le widget Recherche dans la barre d'application en tant que
Vue des actions et activez
dans la barre d'application s'il y a de la place, en configurant
android:showAsAction="ifRoom"
. Dans ce cas, le widget Recherche
et non en tant que vue d'action. Au lieu de cela, un élément de menu
peut s'afficher dans le menu à développer
. Par exemple, lorsque votre application s'exécute sur un écran de petite taille, il est possible qu'il n'y ait pas
suffisamment d'espace dans la barre d'application pour afficher le widget Recherche et d'autres actions
ou des éléments de navigation, de sorte que l'élément de menu apparaisse à la place dans le menu à développer
. Lorsqu'il est placé dans le menu à développer, l'élément fonctionne comme un menu ordinaire
et n'affiche pas la vue Action, c'est-à-dire le widget Recherche.
Pour gérer cette situation, l'élément de menu auquel vous associez le widget Recherche
doit activer la boîte de dialogue de recherche lorsque l'utilisateur la sélectionne dans le menu à développer.
Pour ce faire, implémentez
onOptionsItemSelected()
pour gérer la "recherche" l'élément de menu et ouvrir la boîte de dialogue de recherche en appelant
onSearchRequested()
Pour en savoir plus sur le fonctionnement des éléments de la barre d'application et sur la façon de les gérer cette situation, consultez Ajoutez la barre d'application.
Ajouter la recherche vocale
Vous pouvez ajouter une fonctionnalité de recherche vocale à votre boîte de dialogue ou à votre widget de recherche en
en ajoutant l'attribut android:voiceSearchMode
à votre index de recherche
configuration. Un bouton de recherche vocale est alors ajouté.
Lorsque l'utilisateur termine de parler, la requête de recherche transcrite est envoyée à votre
activité de recherche.
Ce processus est illustré dans l'exemple suivant :
<?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>
Vous devez indiquer la valeur showVoiceSearchButton
pour activer les commandes vocales
recherche. La deuxième valeur, launchRecognizer
, indique que
le bouton de recherche vocale doit lancer un reconnu qui renvoie le
texte transcrit à l'activité de recherche.
Vous pouvez fournir des attributs supplémentaires pour spécifier le comportement de la recherche vocale, telles que la langue attendue et le nombre maximal de résultats à renvoyer. Voir consultez la documentation de référence sur Configuration de la recherche pour en savoir plus sur les attributs disponibles.
<ph type="x-smartling-placeholder">Ajouter des suggestions de recherche
La boîte de dialogue de recherche et le widget Recherche peuvent fournir des suggestions de recherche. à mesure que l'utilisateur tape, avec l'aide du système Android. Le système gère la liste des suggestions et gère l'événement lorsque l'utilisateur sélectionne une suggestion.
Vous pouvez fournir deux types de suggestions de recherche:
- Suggestions de recherche récentes
- Ces suggestions sont des mots que l'utilisateur a précédemment utilisés pour rechercher dans votre application. Voir Ajouter des suggestions de recherche personnalisées.
- Suggestions de recherche personnalisées
- Il s'agit de suggestions de recherche que vous fournissez à partir de votre propre source de données pour aider les utilisateurs à sélectionner immédiatement l'orthographe ou le bon élément qu'ils recherchent ; . Voir la section Ajouter une recherche personnalisée suggestions pour en savoir plus.