Rétrocompatibilité restant

Essayer Compose
Jetpack Compose est le kit d'outils d'UI recommandé pour Android. Découvrez comment ajouter une fonctionnalité de recherche dans Compose.

SearchView et la barre d'action ne sont disponibles que sur Android 3.0 et versions ultérieures. Pour prendre en charge les plates-formes plus anciennes, vous pouvez revenir à la boîte de dialogue de recherche. La boîte de dialogue de recherche est une UI fournie par le système qui se superpose à votre application lorsqu'elle est appelée.

Définir les niveaux d'API minimal et cible

Pour configurer la boîte de dialogue de recherche, déclarez d'abord dans votre fichier manifeste que vous souhaitez prendre en charge les anciens appareils, mais que vous souhaitez cibler Android 3.0 ou les versions ultérieures. Dans ce cas, votre application utilise automatiquement la barre d'action sur Android 3.0 ou version ultérieure, et le système de menu traditionnel sur les appareils plus anciens :

<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" />

<application>
...

Fournir la boîte de dialogue de recherche pour les appareils plus anciens

Pour appeler la boîte de dialogue de recherche sur les anciens appareils, appelez onSearchRequested() chaque fois qu'un utilisateur sélectionne l'élément de menu de recherche dans le menu d'options. Étant donné que les appareils Android 3.0 et versions ultérieures affichent SearchView dans la barre d'action (comme indiqué dans la première leçon), seules les versions antérieures à 3.0 appellent onOptionsItemSelected() lorsque l'utilisateur sélectionne l'élément de menu de recherche.

Kotlin

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.search -> {
            onSearchRequested()
            true
        }
        else -> false
    }
}

Java

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.search:
            onSearchRequested();
            return true;
        default:
            return false;
    }
}

Vérifier la version de compilation Android au moment de l'exécution

Lors de l'exécution, vérifiez la version de l'appareil pour vous assurer qu'une utilisation non compatible de SearchView ne se produit pas sur les appareils plus anciens. Dans notre exemple de code, cela se produit dans la méthode onCreateOptionsMenu() :

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {

    menuInflater.inflate(R.menu.options_menu, menu)

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        (menu.findItem(R.id.search).actionView as SearchView).apply {
            setSearchableInfo(searchManager.getSearchableInfo(componentName))
            setIconifiedByDefault(false)
        }
    }
    return true
}

Java

@Override
public boolean onCreateOptionsMenu(Menu menu) {

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.options_menu, menu);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        SearchManager searchManager =
                (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView =
                (SearchView) menu.findItem(R.id.search).getActionView();
        searchView.setSearchableInfo(
                searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
    }
    return true;
}