Créer une interface de recherche

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 standard EditText 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, .
<ph type="x-smartling-placeholder">

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.

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

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.

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

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:

  1. Déclarez l'activité pour accepter l'intent ACTION_SEARCH dans une <intent-filter> .
  2. 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 .

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

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:

  1. Recevez la requête.
  2. Effectuez des recherches dans vos données.
  3. Présentez les résultats.

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 et SQLiteDatabase 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éseau ProgressBar pour savoir comment afficher un indicateur de progression.
<ph type="x-smartling-placeholder">

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.

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

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().

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

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'intent ACTION_SEARCH ; en appelant le onNewIntent(Intent), en transmettant le nouvel intent ACTION_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() et onNewIntent() peuvent l'exécuter.

    Lorsque le système appelle onNewIntent(Intent), l'activité n'est pas redémarré, donc le getIntent() renvoie le même intent que celui reçu avec onCreate(). C'est pourquoi vous devez appeler setIntent(Intent) dans onNewIntent(Intent), de sorte que l'intent enregistré par activité est mise à jour au cas où vous appelleriez getIntent() à 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);
}
<ph type="x-smartling-placeholder">

Utiliser le widget Recherche

Image montrant un affichage de recherche dans la barre supérieure de l&#39;application

Figure 1 : Le widget SearchView en tant que une vue d'action dans la barre d'application.

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 appelant setIconified()

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.