El SearchView
y la barra de acciones solo están disponibles en Android 3.0 y
más adelante. Si quieres admitir versiones anteriores de la plataforma, puedes recurrir al diálogo de búsqueda. El diálogo de búsqueda es un
IU proporcionada por el sistema que se superpone sobre tu aplicación cuando se invoca.
Cómo configurar los niveles de API mínimo y objetivo
Para configurar el diálogo de búsqueda, primero declara en tu manifiesto que deseas admitir pero que desee orientar a Android 3.0 o versiones posteriores. Cuando haces esto, tu aplicación utiliza automáticamente la barra de acciones en Android 3.0 o versiones posteriores y usa el sistema de menú tradicional en Dispositivos más antiguos:
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="15" /> <application> ...
Cómo proporcionar el diálogo de búsqueda en dispositivos más antiguos
Para invocar el diálogo de búsqueda en dispositivos más antiguos, llama a onSearchRequested()
cada vez que un usuario seleccione la búsqueda.
elemento del menú de opciones. Dado que los dispositivos con Android 3.0 y versiones posteriores muestran la versión
SearchView
en la barra de acciones (como se muestra en la primera lección); solo versiones
anterior a 3.0 llama a onOptionsItemSelected()
cuando la
el usuario selecciona el elemento del menú de búsqueda.
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; } }
Cómo comprobar la versión de compilación de Android en el tiempo de ejecución
En el tiempo de ejecución, comprueba la versión del dispositivo a fin de asegurarte de que no haya problemas de compatibilidad con la SearchView
en dispositivos más antiguos. En nuestro código de ejemplo, esto sucede en
el método 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; }