SearchView
et la barre d'action ne sont disponibles que sur Android 3.0 ou version ultérieure. Pour prendre en charge les plates-formes plus anciennes, vous pouvez utiliser 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 minimaux et cibles
Pour configurer la boîte de dialogue de recherche, déclarez d'abord dans votre fichier manifeste que vous souhaitez prendre en charge les appareils plus anciens, 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 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 appareils plus anciens, 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 le 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
Au moment de l'exécution, vérifiez la version de l'appareil pour vous assurer qu'une utilisation non prise en charge 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; }