Cómo descartar el teclado en Android SearchView?

Tengo un searchView en el ActionBar. Quiero descartar el teclado cuando el usuario ha terminado con la entrada. Tengo el siguiente queryTextListener en el searchView

final SearchView.OnQueryTextListener queryTextListener = new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextChange(String newText) { // Do something return true; } @Override public boolean onQueryTextSubmit(String query) { showProgress(); // Do stuff, make async call getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); return true; } }; 

En base a preguntas similares, el código siguiente debería desechar el teclado, pero no funciona en este caso:

 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

También he intentado:

 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); 

Ninguno de los dos funciona. No estoy seguro de si se trata de un problema concreto Honeycomb o si está relacionado con el searchView en el ActionBar, o ambos. ¿Alguien ha conseguido este trabajo o sabe por qué no funciona?

11 Solutions collect form web for “Cómo descartar el teclado en Android SearchView?”

Yo estaba tratando de hacer algo similar. Necesitaba lanzar el SearchActivity de otra Activity y tener el término de la búsqueda aparece en el campo abierto de la búsqueda cuando cargó. He intentado todos los enfoques anteriores, pero finalmente (al igual que la respuesta de Ridcully anterior ) establecí una variable en onCreateOptionsMenu() en onCreateOptionsMenu() y luego en onQueryTextSubmit() llamado clearFocus() en el SearchView cuando el usuario presentó una nueva búsqueda:

 private SearchView searchView; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.search_menu, menu); searchView = (SearchView) menu.findItem(R.id.menu_search) .getActionView(); // set the reference to the searchView searchView.setOnQueryTextListener(this); searchMenuItem = (MenuItem) menu.findItem(R.id.menu_search); searchMenuItem.expandActionView(); // expand the search action item automatically searchView.setQuery("<put your search term here>", false); // fill in the search term by default searchView.clearFocus(); // close the keyboard on load return true; } @Override public boolean onQueryTextSubmit(String query) { performNewSearch(query); searchView.clearFocus(); return true; } 

Simple, directo al punto y limpio:

  @Override public boolean onQueryTextSubmit(String query) { // your search methods searchView.clearFocus(); return true; } 

De alguna manera funciona si llama

 InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); 

y entonces

 otherWidget.requestFocus(); 

Solo devuelve false en onQueryTextSubmit como se muestra a continuación

 @Override public boolean onQueryTextSubmit(String s) { return false; } 

Para mí, los siguientes trabajos:

En mi actividad tengo una variable miembro

 private SearchView mSearchView; 

En onCreateOptionsMenu() establezco esa variable como así:

 public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.library, menu); mSearchView = (SearchView)menu.findItem(R.id.miSearch).getActionView(); mSearchView.setOnQueryTextListener(this); return true; } 

En el QueryTextListener al final, hago esto:

 mSearchView.setQuery("", false); mSearchView.setIconified(true); 

He echado un vistazo al código fuente de SearchView, y si no restablece el texto de la consulta a una cadena vacía, el SearchView sólo lo hace, y no quita el teclado tampoco. En realidad, la perforación hacia abajo lo suficientemente profundo en el código fuente, se trata de lo mismo, sugirió yuku, pero aún así me gusta mi solución mejor, ya que no tengo que meterse con esas cosas de bajo nivel.

Para mí, ninguno de los anteriores estaba trabajando en la primera presentación. Se estaba escondiendo y luego volver a mostrar el teclado. Tuve que publicar el clearFocus() en el manejador de la vista para hacer que suceda después de que se hizo con todo lo demás.

 mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { @Override public boolean onQueryTextSubmit(String query) { if (!"".equals(query)) { mSearchView.post(new Runnable() { @Override public void run() { mSearchView.clearFocus(); } }); } return true; } @Override public boolean onQueryTextChange(String newText) { return false; } }); 

En una aplicación de tableta con la que estoy trabajando con una actividad de doble panel, sólo he escrito

f.getView().requestFocus(); // f is the target fragment for the search

Y eso fue suficiente para descartar el teclado blando después de una búsqueda. No es necesario usar InputMethodManager

He utilizado ActionBarSherlock 4.3 y tengo un ProgressDialog. Cuando lo descarto en el método postExecute, Searchview gana el foco. Para corregir eso:

 //Handle intent and hide soft keyboard @Override protected void onNewIntent(Intent intent) { setIntent(intent); handleIntent(intent); searchView.setQuery("", false); searchView.setIconified(true); searchView.clearFocus(); } /*When dismiss ProgressDialog, searchview gain focus again and shows the keyboard. I call clearFocus() to avoid it.*/ AsyncTask.onPostExecute(){ if(pd!=null) pd.dismiss(); if(searchView!=null) searchView.clearFocus(); } 

Espero eso ayude.

Edit: He añadido la mejor solución en la parte superior, pero también mantuvo la antigua respuesta como una referencia.

  @Override public boolean onQueryTextSubmit(String query) { searchView.clearFocus(); return false; } 

Respuesta Original: Programé usando un setOnQueryTextListener. Cuando se oculta la vista de búsqueda, el teclado desaparece y, cuando se vuelve a visualizar, el teclado no vuelve a aparecer.

  //set query change listener searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){ @Override public boolean onQueryTextChange(String newText) { // TODO Auto-generated method stub return false; } @Override public boolean onQueryTextSubmit(String query) { /** * hides and then unhides search tab to make sure keyboard disappears when query is submitted */ searchView.setVisibility(View.INVISIBLE); searchView.setVisibility(View.VISIBLE); return false; } }); 

Dos soluciones que funcionaron para mí, la primera utilizando la instancia de SearchView:

 private void hideKeyboard(){ InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchView.getWindowToken(), 0); } 

Segunda solución:

 private void hideKeyboard(){ InputMethodManager inputManager = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } 

Debajo de código está trabajando para que ocultar el teclado en Searchview

 MenuItem searchItem = baseMenu.findItem(R.id.menuSearch); edtSearch= (EditText) searchItem.getActionView().findViewById(R.id.search_src_text); MenuItemCompat.setOnActionExpandListener(searchItem, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { edtSearch.post(new Runnable() { @Override public void run() { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0); } }); return true; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { return true; } }); 
  • SearchView con múltiples fragmentos usando viewpager en android
  • MenuItemCompat.setOnActionExpandListener no hace nada
  • Quitar icono de la vista de búsqueda del texto de la pista
  • No se puede obtener la vista de búsqueda en la barra de acciones para trabajar
  • No se puede llamar a void android.view.View.setElevation (float) en un objeto nulo en lapism / SearchView
  • Cómo manejar el botón Atrás de la vista de búsqueda en android
  • Cómo agregar espacio a la sugerencia de AutoCompleteTextView
  • SearchManager.getSearchableInfo (getComponentName ()) devuelve null
  • Cambiar el texto de SearchView y el color de la sugerencia de appcompat
  • Eliminar el relleno de Android SearchView cuando se amplía
  • Crear ContentProvider asincrónico para Actionbar SearchView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.