Implementación de buscador Android Nativo
He aquí un tutorial en el cual aprenderás la forma mas fácil de implementar el buscador de Android. Como sabemos la búsqueda es una de las funcionalidades más típicas en una aplicación. Por ello, la necesidad de implementar la búsqueda en la ActionBar es algo con lo que vas a tener que enfrentarte tarde o temprano si quieres adaptarte a las guías de diseño de Android.
Para ello crea un nuevo proyecto en Android con el último SDK (necesita ser superior a la 3.0) llamado ejemploBuscador, y elige crear una Activity en blanco. Necesitaremos un botón de búsqueda, así que si no te lo ha creado automáticamente, crea un nuevo archivo XML de tipo menú, y llámalo por ejemplo buscador.xml. Crea un item que se muestre siempre con el icono de la búsqueda y dale un título. También le añadiremos la clase de la que tiene que tomar la vista, que será un objeto de la clase SearchView, quedando así:
les dejo la imagen del buscador para que la puedan implementar en le proyecto
Posteriormente tendrás que implementar los metodos de OnQueryTextListener, OnActionExpandListener. Estos son los cuatro métodos que te pedirá completar. Son los eventos que se lanzan al escribir y al pulsar en buscar. Lo que hago es mostrar un Toast, estos métodos los colocamos en la clase donde vamos a utilizar el buscador en este caso es MainActivity.java
@Override public boolean onMenuItemActionExpand(MenuItem item) { Toast.makeText(getApplicationContext(), "Buscador activado", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { Toast.makeText(getApplicationContext(), "Buscador desactivado", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onQueryTextSubmit(String s) { textoBuscado.setText("Texto buscado\n\n" + s); return false; } @Override public boolean onQueryTextChange(String s) { textoBuscado.setText("Escribiendo texto buscado...\n\n" + s); return false; }Para utilizar los métodos en el MainActivity.java hay que realizar el implements en la clase de la siguiente manera:
public class MainActivity extends ActionBarActivity implements OnQueryTextListener, OnActionExpandListenerLo siguiente que tenemos que hacer es instancia el TextView en la clase de la siguiente manera:
private TextView textoBuscado; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textoBuscado = (TextView) findViewById(R.id.textoBuscado); }En el método onCreateOptionsMenu lo modificamos quedando así:
@Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.buscador, menu); MenuItem searchItem = menu.findItem(R.id.menu_buscador); SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setOnQueryTextListener(this); MenuItemCompat.setOnActionExpandListener(searchItem, this); return super.onCreateOptionsMenu(menu); }Agrego la clase MainActivity.java completa con todos los métodos ya listos.
package android.ejemplo.com.ejemplobuscador; import android.os.Bundle; import android.support.v4.view.MenuItemCompat; import android.support.v4.view.MenuItemCompat.OnActionExpandListener; import android.support.v7.app.ActionBarActivity; import android.support.v7.widget.SearchView; import android.support.v7.widget.SearchView.OnQueryTextListener; import android.view.Menu; import android.view.MenuItem; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends ActionBarActivity implements OnQueryTextListener, OnActionExpandListener { private TextView textoBuscado; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textoBuscado = (TextView) findViewById(R.id.textoBuscado); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.buscador, menu); MenuItem searchItem = menu.findItem(R.id.menu_buscador); SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem); searchView.setOnQueryTextListener(this); MenuItemCompat.setOnActionExpandListener(searchItem, this); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } @Override public boolean onMenuItemActionExpand(MenuItem item) { Toast.makeText(getApplicationContext(), "Buscador activado", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { Toast.makeText(getApplicationContext(), "Buscador desactivado", Toast.LENGTH_SHORT).show(); return true; } @Override public boolean onQueryTextSubmit(String s) { textoBuscado.setText("Texto buscado\n\n" + s); return false; } @Override public boolean onQueryTextChange(String s) { textoBuscado.setText("Escribiendo texto buscado...\n\n" + s); return false; } }Espero les funcione y lo puedan implementar en todos sus proyectos. recuerden que pueden comentar si quieren extender este tutorial un poco más.
como puedo hacer que las busquedas no distingas entre mayusculas y minusculas y tildes......si puedes escribeme a mi correo famarrero@estudiantes.uci.cu gracias de antemano...
ResponderEliminarhola Felix lo que yo haría para esto seria convertir la cadena en mayúsculas de esta manera
EliminarmiCadena.toUpperCase(); y para las tildes en android studio podrás encontrar el elemento "build.gradle", haz doble click en él y se te abrirá una ventana con el título "app" y el icono de gradle. Pues bien, en el código debes agregar la siguiente línea:
android {
compileOptions.encoding "ISO-8859-1"
Es para que realice la compilación con los caracteres españoles.
Hola, como puedo hacer para que busque en una base de datos
ResponderEliminarPolicarpo te recomiendo que mires este tutorial de mysql http://www.hablemosdeandroid.com/2015/12/como-conectar-mysql-con-android.html
Eliminarsabes como hacer para que busque una palabra dentro de la aplicación?
ResponderEliminarhola Andres claro lo que no tengo es preparado un tutorial para explicarlo
EliminarBuen día.
ResponderEliminarEste buscador permite encontrar la palabra en varias actividades de la app o solo es para el main?
hola Alvaro este tutorial solo te explica como implementar el buscador la funcionalidad de este ya la definen según el requerimiento que buscan, que bien puede ser buscar dentro de la app o en una base de datos.
EliminarBUENAS NOCHES UNA PREGUNTA...
ResponderEliminarTENGO UN ARCHIVO CSV Y QUIERO QUE EL BUSCADOR ENCUENTRE EL VECTOR
COMO LE PUEDO HACER QUE LE PUEDO MODIFICAR AL CODIGO QUE TIENES...
SI ME PUDIERAS AYUDAR TE LO AGRADECERIA MUCHO
Buen aporte, me sirvió bastante...
ResponderEliminarhola, mi pregunta es como pueso hacer para que busque palabras solo dentro de una actividad en especifico
ResponderEliminar