Cuando estés listo para agregar una funcionalidad de búsqueda a tu app, Android te ayudará implementar la interfaz de usuario con un diálogo de búsqueda que aparece en la parte superior de la ventana de actividad o un widget de búsqueda que puedes insertar en tu diseño. Tanto el diálogo de búsqueda como el widget pueden entregar la consulta de búsqueda del usuario a una una actividad específica en tu app. De esta manera, el usuario puede iniciar una búsqueda desde cualquier actividad donde el diálogo o widget de búsqueda está disponible y el sistema inicia la actividad adecuada para realizar la búsqueda y presentar los resultados.
Otras funciones disponibles para el diálogo y el widget de búsqueda incluyen las siguientes:
- Búsqueda por voz
- Sugerencias de búsqueda basadas en consultas recientes
- Sugerencias de búsqueda que coinciden con resultados reales en los datos de tu app
En este documento, se muestra cómo configurar tu app para proporcionar una interfaz de búsqueda que es asistida por el sistema Android para entregar búsquedas, mediante el diálogo o el widget de búsqueda.
Recursos relacionados:
Conceptos básicos
Antes de comenzar, decide si quieres implementar tu interfaz de búsqueda usando el diálogo de búsqueda o el widget de búsqueda. Proporcionan la misma búsqueda pero de maneras ligeramente diferentes:
- El diálogo de búsqueda es un componente de la IU que controla
el sistema Android. Cuando el usuario lo activa, el diálogo de búsqueda aparece en
en la parte superior de la actividad.
El sistema Android controla todos los eventos en el diálogo de búsqueda. Cuando un usuario envía una consulta, el sistema la envía a la actividad que que especifiques para manejar las búsquedas. El diálogo también puede proporcionar búsquedas sugerencias mientras el usuario escribe.
- El widget de búsqueda es una instancia de
SearchView
que puedes colocar en cualquier parte del diseño. De forma predeterminada, el widget de búsqueda se comporta como un estándarEditText
widget y no hace nada, pero puedes configurarlo para que la configuración de sistema que controla todos los eventos de entrada, entrega las consultas al y proporciona sugerencias de búsqueda, al igual que la .
Cuando el usuario ejecuta una búsqueda desde el diálogo o widget de búsqueda,
el sistema crea
Intent
y
almacena la consulta del usuario en él. Luego, el sistema inicia la actividad que
declarar para manejar búsquedas, la "actividad de búsqueda", y la entrega
el intent. Para configurar tu app para este tipo de búsqueda asistida, necesitas la
lo siguiente:
- Una configuración de búsqueda
- Es un archivo en formato XML que establece algunos parámetros de configuración para el diálogo o widget de búsqueda. Incluye parámetros de configuración para funciones como búsqueda por voz, sugerencia de búsqueda, y texto de sugerencias para el cuadro de búsqueda.
- Actividad de búsqueda
Activity
que recibe la búsqueda, busca tus datos y muestra la búsqueda resultados.- Una interfaz de búsqueda, proporcionada por cualquiera de las siguientes opciones:
- El diálogo de búsqueda
- De forma predeterminada, el diálogo de búsqueda está oculto. Aparece en la parte superior filtrar cuando llames
onSearchRequested()
Cuando el usuario presiona el botón Buscar.- Un
SearchView
widget- El widget de búsqueda te permite colocar el cuadro de búsqueda en cualquier parte de la incluso como una vista de acción en la barra de la app.
- Un
En el resto de este documento, se muestra cómo crear la configuración de búsqueda de búsqueda y de búsqueda, y cómo implementar una interfaz de búsqueda con el o un widget de búsqueda.
Crea una configuración que se pueda buscar
Lo primero que necesitas es un archivo en formato XML llamado
configuración de búsqueda.
Configura ciertos aspectos de la IU del diálogo o widget de búsqueda y define cómo
funciones como las sugerencias y la búsqueda por voz. Tradicionalmente, este archivo
con el nombre searchable.xml
y debe guardarse en el archivo res/xml/
del proyecto.
El archivo de configuración de búsqueda debe incluir los
<searchable>
como su nodo raíz y especificar uno o más atributos, como se muestra en el
siguiente ejemplo:
<?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>
El atributo android:label
es el único atributo requerido. Integra
apunta a un recurso de cadenas, que debe ser el nombre de la app. La etiqueta no está
visibles para el usuario hasta que habilites las sugerencias de búsqueda para el cuadro de búsqueda rápida, en
En qué punto aparecerá la etiqueta en la lista de elementos que se pueden buscar en el sistema.
configuración.
Aunque no es obligatorio, te recomendamos que siempre incluyas
Atributo android:hint
, que proporciona una cadena de sugerencia en la búsqueda
antes de que los usuarios ingresen una consulta. La pista es importante porque proporciona
pistas importantes a los usuarios sobre lo que pueden buscar.
El elemento <searchable>
acepta muchos otros atributos.
Sin embargo, no necesitarás la mayoría de los atributos hasta que agregues funciones como los siguientes:
sugerencias de búsqueda y
búsqueda por voz. Para obtener información detallada sobre el
de configuración de Terraform, consulta la
Configuración de búsqueda
documento de referencia.
Cómo crear una actividad de búsqueda
Una actividad de búsqueda es el Activity
de tu app que realiza
búsquedas basadas en una cadena de consulta y presenta los resultados de la búsqueda.
Cuando el usuario ejecuta una búsqueda en el diálogo o widget de búsqueda, el sistema
inicia tu actividad de búsqueda y le entrega la búsqueda en una
Intent
con el
ACTION_SEARCH
acción. La actividad de búsqueda recupera la consulta del directorio
QUERY
extra, busca tus datos y presenta los resultados.
Como puedes incluir el diálogo o widget de búsqueda en cualquier otra actividad en tu app, el sistema debe saber cuál es tu actividad de búsqueda para para que pueda entregar correctamente la búsqueda. Por lo tanto, primero declara en el archivo de manifiesto de Android.
Cómo declarar una actividad de búsqueda
Si aún no tienes uno, crea un Activity
que tenga un buen rendimiento.
y presenta los resultados. No es necesario que implementes el método
solo tienes que crear una actividad que puedas declarar en el
. Dentro del archivo de manifiesto
<activity>
haz lo siguiente:
- Declara la actividad para aceptar el intent
ACTION_SEARCH
en una<intent-filter>
. - Especifica la configuración de búsqueda que se usará en un
<meta-data>
.
Esto se muestra en el siguiente ejemplo:
<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>
El elemento <meta-data>
debe incluir el
Atributo android:name
con un valor de
"android.app.searchable"
y android:resource
con una referencia al archivo de configuración de búsqueda. En la
ejemplo anterior, se refiere a res/xml/searchable.xml
.
Realizar una búsqueda
Después de declarar tu actividad de búsqueda en el manifiesto, sigue este procedimiento para realizar una búsqueda en tu actividad de búsqueda:
Recibir la consulta
Cuando un usuario ejecuta una búsqueda desde el widget o diálogo de búsqueda, el sistema
inicia tu actividad de búsqueda y le envía un elemento ACTION_SEARCH
.
. Este intent lleva la búsqueda en la cadena QUERY
adicionales. Busca este intent cuando comience la actividad y extrae la cadena.
Por ejemplo, así puedes obtener la búsqueda cuando
inicio de la actividad:
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 cadena QUERY
siempre se incluye con el
ACTION_SEARCH
. En el ejemplo anterior, la consulta está
se recupera y se pasa a un método doMySearch()
local, en el que
la operación de búsqueda real.
Busca tus datos
El proceso de almacenar y buscar tus datos es único para tu app. Puedes cómo almacenar y buscar datos de muchas maneras. En este documento, no se muestra cómo hacerlo. Considera cómo almacenas y buscas tus datos en función de tus necesidades y datos de un conjunto de datos tengan un formato común. Estas son algunas sugerencias que puedes aplicar:
- Si tus datos están almacenados en una base de datos SQLite en el dispositivo, realizar una
búsqueda en el texto completo, con FTS3, en lugar de
LIKE
puede proporcionar una búsqueda más sólida en datos de texto y también generan resultados mucho más rápido. Consulta sqlite.org para información sobre FTS3 y lasSQLiteDatabase
para obtener información sobre SQLite en Android. - Si tus datos se almacenan en línea, entonces el rendimiento de búsqueda percibido podría
pueden inhibirse por la conexión de datos del usuario. Es posible que quieras mostrar un
indicador de progreso hasta que devuelva la búsqueda. Consulta
android.net
para obtener una referencia de las APIs de red yProgressBar
para obtener información sobre cómo mostrar un indicador de progreso.
Presenta los resultados
Independientemente de dónde se encuentren tus datos y cómo los busques, te recomendamos que
devuelves los resultados de la búsqueda a tu actividad de búsqueda con una
Adapter
Esta
puedes presentar todos los resultados de la búsqueda de una
RecyclerView
Si tus datos provienen de una consulta de la base de datos SQLite, puedes aplicar los resultados a una
RecyclerView
con un
CursorAdapter
Si tus datos vienen en un formato diferente, puedes crear una extensión de
BaseAdapter
Un Adapter
vincula cada elemento de un conjunto de datos a un
View
. Cuándo
se aplica Adapter
a RecyclerView
, cada pieza
de datos se inserta como una vista individual en la lista. Adapter
es
solo una interfaz, por lo que implementaciones como
CursorAdapter
, para vincular datos desde un
Cursor
—son
según tus necesidades. Si ninguna de las implementaciones existentes funciona para tus datos, puedes
implementa el tuyo desde BaseAdapter
.
Cómo usar el diálogo de búsqueda
El diálogo de búsqueda proporciona un cuadro de búsqueda flotante en la parte superior de la pantalla. con el ícono de la app a la izquierda. El diálogo de búsqueda puede proporcionar sugerencias de búsqueda a medida que el usuario escribe. Cuando el usuario ejecuta una búsqueda, el sistema la envía una consulta a una actividad de búsqueda que realiza la búsqueda.
De forma predeterminada, el diálogo de búsqueda siempre está oculto hasta que el usuario lo activa.
Tu app puede activar el diálogo de búsqueda llamando
onSearchRequested()
Sin embargo, este método no funciona hasta que
habilitar el diálogo de búsqueda de la actividad.
Para permitir que el diálogo de búsqueda realice búsquedas, indícale al sistema el
La actividad de búsqueda debe recibir consultas de búsqueda del diálogo de búsqueda. Para
ejemplo, en la sección anterior sobre
crear una actividad de búsqueda, un formato
se crea la actividad llamada SearchableActivity
. Si quieres un
separada, como una llamada OtherActivity
, para mostrar el
cuadro de diálogo de búsqueda y enviar búsquedas a SearchableActivity
, declarar
en el manifiesto que SearchableActivity
es la actividad de búsqueda
para usar en el diálogo de búsqueda en OtherActivity
.
Para declarar la actividad de búsqueda del diálogo de búsqueda de una actividad, agrega un
<meta-data>
dentro del elemento de la actividad correspondiente
elemento <activity>
. El <meta-data>
debe incluir el atributo android:value
que especifica la
el nombre de clase de la actividad de búsqueda y el atributo android:name
con un valor de "android.app.default_searchable"
.
Por ejemplo, esta es la declaración para una actividad de búsqueda:
SearchableActivity
y otra actividad,
OtherActivity
, que usa SearchableActivity
para
realizar búsquedas ejecutadas desde su diálogo de búsqueda:
<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>
Dado que OtherActivity
ahora incluye un
Elemento <meta-data>
para declarar a qué actividad de búsqueda
usar para las búsquedas, la actividad habilita el diálogo de búsqueda. Si bien el usuario está
En esta actividad, el método onSearchRequested()
activa la
en el cuadro de diálogo de búsqueda. Cuando el usuario ejecuta la búsqueda, el sistema inicia
SearchableActivity
y lo entrega el ACTION_SEARCH
.
Si quieres que todas las actividades de tu app proporcionen el diálogo de búsqueda, inserta
el elemento <meta-data>
anterior como elemento secundario de
<application>
en lugar de cada elemento <activity>
. De esta manera, todas las actividades
hereda el valor, proporciona el diálogo de búsqueda y envía las búsquedas a
la misma actividad de búsqueda. Si tienes varias actividades de búsqueda, puedes
anular la actividad de búsqueda predeterminada colocando una etiqueta
<meta-data>
dentro de actividades individuales.
Con el diálogo de búsqueda habilitado para tus actividades, tu app está lista para realizar búsquedas.
Cómo invocar el diálogo de búsqueda
Aunque algunos dispositivos proporcionan un botón de búsqueda exclusivo, el comportamiento de la
puede variar según el dispositivo y muchos dispositivos no proporcionan una
en absoluto. Por eso, cuando uses el diálogo de búsqueda, debes proporcionar un botón de búsqueda
en tu IU que activa el diálogo de búsqueda llamando
onSearchRequested()
Por ejemplo, agrega un botón de búsqueda en tu
El menú de opciones o el diseño de la IU
que llame a onSearchRequested()
.
También puedes habilitar la opción "Escribir para buscar" en la nube, que activa
diálogo de búsqueda cuando el usuario comienza a escribir en el teclado. Las combinaciones de teclas
insertar en el diálogo de búsqueda. Puedes habilitar la función de escribir para buscar en tu actividad
llamando
setDefaultKeyMode
o
DEFAULT_KEYS_SEARCH_LOCAL
, durante
de tus actividades
onCreate()
.
El impacto del diálogo de búsqueda en el ciclo de vida de la actividad
El diálogo de búsqueda es un
Dialog
que flota
en la parte superior de la pantalla. No causa ningún cambio en la pila de actividades, así que
cuando aparece el diálogo de búsqueda, no hay métodos de ciclo de vida, como
onPause()
—son
llamado. Tu actividad pierde el foco de entrada porque se le da a la
en el cuadro de diálogo de búsqueda.
Si deseas recibir una notificación cuando el diálogo de búsqueda esté activado, anula el
onSearchRequested()
. Cuando el sistema llama a este método,
es una indicación de que tu actividad pierde el foco de entrada para el diálogo de búsqueda, de modo que
puedes realizar cualquier trabajo apropiado para el evento, como pausar un juego. Salvo que
estás pasando el contexto de búsqueda
datos, que se analiza en otra sección de este documento, finaliza el
llamando a la implementación de la superclase:
Kotlin
override fun onSearchRequested(): Boolean { pauseSomeStuff() return super.onSearchRequested() }
Java
@Override public boolean onSearchRequested() { pauseSomeStuff(); return super.onSearchRequested(); }
Si el usuario cancela la búsqueda presionando el botón Atrás, el cuadro de diálogo de búsqueda
se cierra y la actividad recupera el enfoque de entrada. Regístrate para recibir notificaciones
Cuando el diálogo de búsqueda se cierra con
setOnDismissListener()
,
setOnCancelListener()
,
o ambas. Solo debes registrar el
OnDismissListener
,
porque se llama cada vez que se cierra el diálogo de búsqueda. El
OnCancelListener
solo se refiere a eventos en los que el usuario sale explícitamente del diálogo de búsqueda.
no se llama cuando se ejecuta una búsqueda. Cuando se ejecuta la búsqueda, el
el cuadro de diálogo de búsqueda desaparece automáticamente.
Si la actividad actual no es la de búsqueda, la actividad
Los eventos de ciclo de vida de una actividad se activan cuando el usuario ejecuta un
búsqueda: la actividad actual recibe onPause()
, como se describe
en Introducción a
actividades. Sin embargo, si la actividad actual es la de búsqueda,
sucede una de dos cosas:
- De forma predeterminada, la actividad de búsqueda recibe el
ACTION_SEARCH
con una llamada aonCreate()
, y una nueva instancia de la actividad se lleva a la parte superior de la actividad en una pila. Ahora hay dos instancias de tu actividad de búsqueda en la de la pila de actividades, por lo que presionar el botón Atrás te llevará a la anterior de la actividad de búsqueda, en lugar de salir de la actividad. - Si configuras
android:launchMode
como"singleTop"
, Luego, la actividad de búsqueda recibe el intentACTION_SEARCH
con una llamada aonNewIntent(Intent)
, que pasa el nuevo intentACTION_SEARCH
. Por ejemplo, aquí te mostramos cómo podrías manejar este caso, en el que el modo de lanzamiento de la actividad de búsqueda es"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); } }
En comparación con el código de ejemplo en la sección sobre realizar una búsqueda, todo el código para manejar las la intención de búsqueda ahora está en el método
handleIntent()
, de modo queonCreate()
yonNewIntent()
pueden ejecutarlo.Cuando el sistema llama a
onNewIntent(Intent)
, la actividad no se reiniciarse, por lo quegetIntent()
muestra el mismo intent que se recibe cononCreate()
. Por eso debes llamar asetIntent(Intent)
dentro deonNewIntent(Intent)
: para que el intent guardado por el se actualiza la actividad en caso de que llames agetIntent()
en el futuro.
La segunda situación, con el modo de lanzamiento "singleTop"
, suele ser
preferible porque, después de hacer una búsqueda, el usuario puede realizar
búsquedas y no deseas que tu app cree varias instancias de la
actividad de búsqueda. Te recomendamos que configures la actividad de búsqueda en
Modo de lanzamiento "singleTop"
en el manifiesto de la app, como se muestra en el
siguiente ejemplo:
<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>
Cómo pasar datos de contexto de búsqueda
En algunos casos, puedes definir mejor la búsqueda que se incluye
la actividad de búsqueda de cada búsqueda realizada. Sin embargo, si deseas definir mejor
los criterios de búsqueda en función de la actividad en la que el usuario realiza una
puedes proporcionar datos adicionales en el intent que el sistema envía
tu actividad de búsqueda. Puedes pasar los datos adicionales en el
APP_DATA
Bundle
, que es
incluido en el intent ACTION_SEARCH
.
Para pasar este tipo de datos a tu actividad de búsqueda, anula el parámetro
Método onSearchRequested()
para la actividad desde la que el usuario puede
Realiza una búsqueda, crea un objeto Bundle
con los datos adicionales.
llamar
startSearch()
para activar el diálogo de búsqueda. Por ejemplo:
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; }
Un resultado verdadero indica que manejas correctamente este evento de devolución de llamada y
Llama a startSearch()
para activar el diálogo de búsqueda. Después de que el usuario
envía una consulta, se entrega a tu actividad de búsqueda junto con los datos
que agregues. Puedes extraer los datos adicionales de APP_DATA
.
Bundle
para definir mejor la búsqueda, como se muestra en el siguiente ejemplo:
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); }
Usa el widget de búsqueda
El widget de búsqueda proporciona la misma funcionalidad que el diálogo de búsqueda. Integra inicia la actividad correspondiente cuando el usuario ejecuta una búsqueda, y puede proporcionar sugerencias de búsqueda y realizar búsquedas por voz. Si no es una opción para colocar el widget de búsqueda en la barra de la app, puedes colocar en alguna parte del diseño de tu actividad.
Cómo configurar el widget de búsqueda
Después de crear un
configuración de búsqueda y una
actividad de búsqueda, habilitar la búsqueda asistida
para cada SearchView
llamando
setSearchableInfo()
y pásale el objeto SearchableInfo
que representa tu
configuración de búsqueda.
Para obtener una referencia al SearchableInfo
, llama a
getSearchableInfo()
activado
SearchManager
Por ejemplo, si usas un objeto SearchView
como vista de acción en
la barra de la aplicación, habilita el widget durante la
onCreateOptionsMenu()
la devolución de llamada, como se muestra en el siguiente ejemplo:
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; }
El widget de búsqueda ya está configurado, y el sistema envía consultas de búsqueda a tu actividad de búsqueda. También puedes habilitar sugerencias de búsqueda para el widget de búsqueda.
Para obtener más información sobre las vistas de acción en la barra de la app, consulta Cómo usar vistas y acciones de acción del proveedor de servicios en la nube.
Otras funciones del widget de búsqueda
El widget SearchView
ofrece algunas funciones adicionales que
podría querer:
- Un botón Enviar
- De forma predeterminada, no hay ningún botón para enviar una búsqueda, por lo que el usuario
presiona la tecla Intro en el teclado para iniciar una búsqueda. Tú
puede agregar la etiqueta "enviar" llamando
setSubmitButtonEnabled(true)
- Mejora en la definición de consultas para sugerencias de búsqueda
- Cuando habilitas las sugerencias de búsqueda, sueles esperar que los usuarios seleccionen un
sugerencia, pero es posible que también quiera definir mejor la búsqueda sugerida.
Puedes agregar un botón junto a cada sugerencia que la inserte.
en el cuadro de búsqueda para que el usuario lo perfeccione mediante una llamada
setQueryRefinementEnabled(true)
- La capacidad de activar o desactivar la visibilidad del cuadro de búsqueda
- De forma predeterminada, el widget de búsqueda está “iconificado”, lo que significa que es
representados solo por un icono de búsqueda: una lupa. Se expande a
mostrar el cuadro de búsqueda cuando el usuario presione el ícono. Como se muestra en el ejemplo anterior
Por ejemplo, puedes mostrar el cuadro de búsqueda
de forma predeterminada llamando
setIconifiedByDefault(false)
También puedes activar o desactivar la apariencia del widget de búsqueda llamandosetIconified()
Hay muchas otras APIs en la clase SearchView
que permiten
puedes personalizar el widget de búsqueda. Sin embargo, la mayoría de ellos solo se usan cuando
controlar todas las entradas del usuario tú mismo, en lugar de usar el sistema Android para proporcionar
y mostrar sugerencias de búsqueda.
Usa el widget y el diálogo
Si insertas el widget de búsqueda en la barra de la app como una
vista de acción y habilite
para que aparezca en la barra de la aplicación si hay espacio, estableciendo
android:showAsAction="ifRoom"
, entonces el widget de búsqueda podría
no aparecen como una vista de acción. En su lugar, es posible que aparezca un elemento de menú en el menú
. Por ejemplo, si tu app se ejecuta en una pantalla más pequeña, es posible que no haya
espacio suficiente en la barra de la aplicación para mostrar el widget de búsqueda junto con otras acciones.
elementos o elementos de navegación, por lo que el elemento de menú aparece en el menú ampliado
. Cuando se coloca en el menú ampliado, el elemento funciona como un menú común.
elemento y no muestra la vista de acción, es decir, el widget de búsqueda.
Para resolver esta situación, el elemento de menú al que adjuntaste el widget de búsqueda
debe activar el diálogo de búsqueda cuando el usuario lo selecciona en el menú ampliado.
Para que esto suceda, implementa
onOptionsItemSelected()
para procesar la búsqueda elemento de menú y abrir el diálogo de búsqueda llamando
onSearchRequested()
Para obtener más información sobre el funcionamiento de los elementos de la barra de la aplicación y cómo manejarlos esta situación, consulta Agrega la barra de la app.
Agrega la búsqueda por voz
Puedes agregar la función de búsqueda por voz a tu diálogo o widget de búsqueda; para ello, haz lo siguiente:
Agrega el atributo android:voiceSearchMode
al archivo
configuración. Esto agregará un botón de búsqueda por voz que iniciará un mensaje de voz.
Cuando el usuario termina de hablar, la búsqueda transcrita se envía a tu
actividad de búsqueda.
Esto se muestra en el siguiente ejemplo:
<?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>
Se requiere el valor showVoiceSearchButton
para habilitar la voz
búsqueda. El segundo valor, launchRecognizer
, especifica que el valor
botón de búsqueda por voz debe iniciar un reconocidor que devuelva el
transcrito texto a la actividad de búsqueda.
Puedes proporcionar atributos adicionales para especificar el comportamiento de la búsqueda por voz. como el idioma esperado y la cantidad máxima de resultados que se mostrarán. Consulta la referencia Configuración de búsqueda para obtener más información información sobre los atributos disponibles.
Agrega sugerencias de búsqueda
Tanto el diálogo como el widget de búsqueda pueden proporcionar sugerencias de búsqueda. a medida que el usuario escribe, con la ayuda del sistema Android. El sistema administra la lista de sugerencias y controla el evento cuando el usuario selecciona un sugerencia.
Puedes proporcionar dos tipos de sugerencias de búsqueda:
- Sugerencias de búsquedas recientes
- Estas sugerencias son palabras que el usuario utilizó anteriormente como búsqueda consultas en tu app. Consulta Agregar sugerencias de búsqueda personalizadas para obtener más información.
- Sugerencias de búsqueda personalizadas
- Estas son sugerencias de búsqueda que proporcionas desde tu propia fuente de datos a Ayudar a los usuarios a seleccionar de inmediato la ortografía o el elemento correctos que buscan . Consulte Cómo agregar una búsqueda personalizada sugerencias para obtener más información.