programacion - Android descarta el teclado
teclado para android apk (7)
¿Desea deshabilitar o descartar un teclado virtual?
Si solo desea descartarlo, puede usar las siguientes líneas de código en el botón al hacer clic. Evento
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
¿Cómo descarto el teclado cuando se presiona un botón?
Aquí hay una solución de Kotlin (mezclando las varias respuestas en el hilo)
Crear una función de extensión (quizás en una clase común de ViewHelpers)
fun Activity.dismissKeyboard() {
val inputMethodManager = getSystemService( Context.INPUT_METHOD_SERVICE ) as InputMethodManager
if( inputMethodManager.isAcceptingText )
inputMethodManager.hideSoftInputFromWindow( this.currentFocus.windowToken, /*flags:*/ 0)
}
Entonces simplemente consuma usando:
// from activity
this.dismissKeyboard()
// from fragment
activity.dismissKeyboard()
Esta es mi solución
public static void hideKeyboard(Activity activity) {
View v = activity.getWindow().getCurrentFocus();
if (v != null) {
InputMethodManager imm = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}
La primera solución con InputMethodManager funcionó como un campeón para mí, el método getWindow (). SetSoftInputMode no funcionaba en Android 4.0.3 HTC Amaze.
@Ethan Allen, no necesité hacer el texto de edición final. ¿Tal vez estás usando una clase interna EditText que has declarado el método contenedor? Puede hacer que EditText sea una variable de clase de la Actividad. O simplemente declare un nuevo EditText dentro de la clase / método interno y use findViewById () nuevamente. Además, no encontré que necesitaba saber qué EditText en el formulario tenía foco. Podría elegir uno arbitrariamente y usarlo. Al igual que:
EditText myEditText= (EditText) findViewById(R.id.anyEditTextInForm);
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);
La solución anterior no funciona para todos los dispositivos y, además, usa EditText como parámetro. Esta es mi solución, solo llame a este método simple:
private void hideSoftKeyBoard() {
InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if(imm.isAcceptingText()) { // verify if the soft keyboard is open
imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
también puede usar este código en el evento click button
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
public static void hideSoftInput(Activity activity) {
try {
if (activity == null || activity.isFinishing()) return;
Window window = activity.getWindow();
if (window == null) return;
View view = window.getCurrentFocus();
//give decorView a chance
if (view == null) view = window.getDecorView();
if (view == null) return;
InputMethodManager imm = (InputMethodManager) activity.getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
if (imm == null || !imm.isActive()) return;
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
} catch (Throwable e) {
e.printStackTrace();
}
}