Andrés
Yo tengo un Activity
con un EditText
un botón y un ListView
. El propósito es escribir una pantalla de búsqueda en el EditText
presione el botón y haga que los resultados de la búsqueda llenen esta lista.
Todo esto funciona perfectamente, pero el teclado virtual se comporta de manera extraña.
Si hago clic en el EditText
, obtengo el teclado virtual. Si hago clic en el botón “Listo” en el teclado virtual, desaparece. Sin embargo, si hago clic en mi botón de búsqueda antes de hacer clic en “Listo” en el teclado virtual, el teclado virtual permanece y no puedo deshacerme de él. Hacer clic en el botón “Listo” no cierra el teclado. Cambia el botón “Listo” de “Listo” a una flecha y permanece visible.
Gracias por tu ayuda
Pablo Maserrat
InputMethodManager inputManager = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
InputMethodManager.HIDE_NOT_ALWAYS);
Pongo esto justo después de la onClick(View v)
evento.
Necesitas importar android.view.inputmethod.InputMethodManager
;
El teclado se oculta al hacer clic en el botón.
-
Nota: (en caso de que desee utilizar este método en instancias en las que podría no haber foco (por ejemplo, onPause(), etc.):
inputManager.hideSoftInputFromWindow((null == getCurrentFocus()) ? null : getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-Peter Ajtai
16 de febrero de 2012 a las 1:37
-
También tienes que importar Context.
– Si8
22 de julio de 2013 a las 18:19
-
PRECAUCIÓN: arroja NPE si el teclado ya está oculto. Siga el comentario de Peter para evitar esto.
– Don Laringe
21 de mayo de 2015 a las 8:47
-
¿Por qué aparece el teclado después de hacer clic en un botón irrelevante? ¿Alguien puede proporcionar alguna explicación o un enlace?
– kommradHomero
25 de enero de 2016 a las 11:22
-
¡Funciona como el encanto!
– ARIF
02/09/2016 a las 14:44
Andrés
mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// hide virtual keyboard
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(),
InputMethodManager.RESULT_UNCHANGED_SHOWN);
return true;
}
return false;
}
});
-
Esto funciona para mi. ¡Gracias!
– Aman Goyal
29 de abril de 2019 a las 10:20
Prashant Maheshwari Andro
Usar el siguiente código
your_button_id.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
try {
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
} catch (Exception e) {
}
}
});
-
Atrapar la excepción en lugar de un simple control nulo, ¿en serio?
– Dr. Glass
06/11/2016 a las 20:52
-
Trabajando para mí, oculta el teclado al hacer clic en el botón
– Ashishdhiman2007
18 de marzo de 2017 a las 10:12
-
solución simple a lo que necesitaba: ocultar el teclado después de hacer clic en el botón de búsqueda.
– dawoodman71
27/04/2017 a las 20:15
-
funcionó sin ningún problema.
– Luz de la luna
26 de septiembre de 2021 a las 11:38
píxel
deberías implementar OnEditorActionListener
para su EditView
public void performClickOnDone(EditView editView, final View button){
textView.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
hideKeyboard();
button.requestFocus();
button.performClick();
return true;
}
});
Y ocultas el teclado por:
public void hideKeybord(View view) {
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
InputMethodManager.RESULT_UNCHANGED_SHOWN);
}
También debe disparar el teclado escondido en su botón usando onClickListener
Ahora, al hacer clic en ‘Listo’ en el teclado virtual y el botón, se hará lo mismo: ocultar el teclado y realizar la acción de clic.
priya rajan
para la actividad,
InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Para fragmentos, utilice obtenerActividad()
getActivity().getSystemService();
getActivity().getCurrentFocus();
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
Centro Comercial Gaurav
En su caso, como solo tiene un EditText, creo que la siguiente solución es la mejor. Si tuviera más de un componente EditText, entonces tendría que concentrarse en el EditText que desea cerrar o llamar a la siguiente función para cada EditText. Sin embargo, para ti, esto funciona de manera brillante:
editText.onEditorAction(EditorInfo.IME_ACTION_DONE);
Básicamente, EditText ya tiene una función que está destinada a tratar qué hacer después de que se haya utilizado el teclado. Simplemente pasamos que queremos cerrar el teclado.
Ziem
Agregue el siguiente código dentro de su evento de clic de botón:
InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-
¡Funciona como el encanto!
– codificador pc
25 de julio de 2017 a las 3:40