Le SearchView
et la barre d'action ne sont disponibles que sur Android 3.0 et
plus tard. Pour assurer la compatibilité avec d'anciennes plates-formes, vous pouvez revenir à la boîte de dialogue de recherche. La boîte de dialogue de recherche
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 mais que vous souhaitez cibler Android 3.0 ou version ultérieure. Dans ce cas, votre application utilise automatiquement la barre d'action sur Android 3.0 ou version ultérieure et utilise le système de menu traditionnel 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 ouvrir la boîte de dialogue de recherche sur des appareils plus anciens, appelez onSearchRequested()
chaque fois qu'un utilisateur sélectionne la recherche
dans le menu d'options. Étant donné que les appareils Android 3.0 et versions ultérieures affichent le
SearchView
dans la barre d'action (comme illustré dans la première leçon), uniquement les versions
versions antérieures à la version 3.0, appellent onOptionsItemSelected()
lorsque la classe
l'utilisateur sélectionne l'élément
du 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 du build Android au moment de l'exécution
Au moment de l'exécution, vérifiez la version de l'appareil pour vous assurer qu'aucune utilisation non compatible de SearchView
ne se produit sur les appareils plus anciens. Dans notre exemple de code, cela se produit
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; }