SearchView
Explicación del concepto de SearchView.
DEFINICIÓN
Un widget que facilita al usuario realizar búsquedas a una Proveedor de busqueda. Muestra un listado de sugerencias de resultado (si está disponible) y permite al usuario seleccionar un resultado para acceder a él.
USO DESDE XML
Para que un SearchView funcione de manera óptima, es importante que tenga espacio suficiente para mostrarse.
En este caso, vamos a utilizar una Activity con un SearchView y una ListView con los posibles resultados. Después configuraremos todo esto para darle vida.
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="15dp">
<SearchView
android:id="@+id/svEjemplo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="Comunidad Autónoma"
android:queryBackground="@android:color/transparent"/>
<ListView
android:id="@+id/lvEjemplo"
android:layout_width="match_parent"
android:layout_height="250dp" />
</LinearLayout>
</ScrollView> 
ATRIBUTOS
android:inconifiedByDefault
Define si lo que vemos por defecto es el icono de busqueda (true) o el campo de busqueda (false).
Es indispensable ponerlo en false para poder interactuar con el campo de busqueda.
android:imeOptions
Tiene las opciones en el siguiente enlace.
android:inputType
Explicado en Views -> Pallete Texts -> EditText.
android:maxWidth
Define la anchura máxima.
android:queryHint
Una ayuda opcional que muestra un texto de ejemplo en el cuadro de busquedas cuando se encuentra vacío.
CONFIGURACIÓN
La configuración de un SearchView es bastante similar a la de un AutoCompleteTextView:
Definir un adaptador
Vamos a utilizar un adaptador para la ListString que modifique su contenido en función de lo que capte el Listener del Search View:
val lvEjemplo = findViewById<ListView>(R.id.lvEjemplo)
val adapterCCAA: ArrayAdapter<String> = ArrayAdapter(this,
android.R.layout.simple_dropdown_item_1line,
resources.getStringArray(R.array.ccaa_array))
lvEjemplo.adapter = adapterCCAAComo en este ejemplo la lista va sobre Comunidades Autónomas en España, utilizamos un StringArray que se ha almacenado previamente en el archivo strings.xml.
Ahora ya tenemos el contenido contra el que se va a realizar la búsqueda.
Definir el listener
setOnQueryTextListener
Este listener, igual que el de las SeekBar tiene una forma curiosa pues recibe como argumento un objeto del tipo SearchView.OnQueryTextListener{} que contiene los siguientes controladores:
OnQueryTextSubmit(query: String?): Boolean
Controla el momento en el que se envía una búsqueda dándole al botón de buscar.
OnQueryTextChange(query:String?): Boolean
Controla cada cambio que se realiza en la búsqueda.
Código
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:layout_margin="15dp">
<SearchView
android:id="@+id/svEjemplo"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:iconifiedByDefault="false"
android:queryHint="Comunidad Autónoma"
android:queryBackground="@android:color/transparent"/>
<ListView
android:id="@+id/lvEjemplo"
android:layout_width="match_parent"
android:layout_height="250dp" />
</LinearLayout>
</ScrollView>package com.example.android.appdeejemplo
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.ArrayAdapter
import android.widget.ListView
import android.widget.SearchView
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val svEjemplo = findViewById<SearchView>(R.id.svEjemplo)
val lvEjemplo = findViewById<ListView>(R.id.lvEjemplo)
val adapterCCAA: ArrayAdapter<String> = ArrayAdapter(this, android.R.layout.simple_dropdown_item_1line, resources.getStringArray(R.array.ccaa_array))
lvEjemplo.adapter = adapterCCAA
svEjemplo.setOnQueryTextListener(object: SearchView.OnQueryTextListener{
override fun onQueryTextSubmit(query: String?): Boolean {
svEjemplo.clearFocus()
if (query in resources.getStringArray(R.array.ccaa_array)) adapterCCAA.filter.filter(query)
return false
}
override fun onQueryTextChange(query: String?): Boolean {
adapterCCAA.filter.filter(query)
return false
}
})
}
}


Last updated

