2012-07-24 18 views
29

Quiero ocultar el teclado virtual después de que el AlertDialog lo desestime, pero todavía está visible. Aquí está mi código:Ocultar el teclado virtual después de cerrar el cuadro de diálogo

alert = new AlertDialog.Builder(MyActivity.this); 
imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 

alert.setOnDismissListener(new DialogInterface.OnDismissListener() { 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0); 
    } 
}); 

Respuesta

7
+0

Ambos métodos son el uso EditarTexto vista, pero no lo tienen. No tengo EditText. Es un diálogo en mi SettingsActivity. Cuando está cerrado, el teclado muestra :( –

+1

si el teclado emerge en un cuadro de diálogo, significa que su cuadro de diálogo debe tener un texto de edición dentro. Así que puede escribir el código anterior pasando el token de ventana de su EditText, y luego llamar a dialog.dismiss() – AndroidGuy

+0

o si no es el caso anterior ... significa que si Edittext no está en su cuadro de diálogo, debe verificar para qué EditText aparece y ocultarlo antes de mostrar el cuadro de diálogo. Si esto tampoco funciona, escriba su código. – AndroidGuy

3

que utiliza este método:

IBinder token = searchTextEntry.getWindowToken(); 
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(token, 0); 

Donde searchTextEntry es el nombre de mi referencia EditText.

+0

No he EditText. Es el diálogo en mi SettingsActivity. Cuando está cerrado el teclado muestra :( –

14

Me encontré con el mismo problema. Lo resolvió haciendo esto. No se necesita ninguna referencia:

imm.hideSoftInputFromWindow(getWindow().getDecorView() 
       .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
+2

+1 para una buena respuesta. – BBdev

+0

esto funciona correctamente al intentar ocultar desde un DialogFragment – Kammaar

+0

Pero deja una sombra blanca temporalmente, ¿cómo prevenir la sombra blanca? –

61

En manifiesto XML

androide: windowSoftInputMode = "stateAlwaysHidden"

Se ocultará automáticamente el teclado suave en Descartar de diálogo

+2

Fácil y efectivo ... ¡¡¡Gracias !!! –

+2

¡Esta debería ser la respuesta aceptada! Es una mala práctica anular propiedades declaradas en AndroidManifest.xml – Renjith

+0

@Renjith ¿puede explicar por qué es malo – Rajeshwar

0

Todos estos consejos para utilizar InputMethodManager son un tanto vaga - el lugar exacto llamarlo,
y no funciona, al menos para mí.
Sí, el teclado desaparece pero la aplicación se bloquea?
El problema principal es que el ocultamiento del teclado ocurre al mismo tiempo cuando el diálogo desaparece.

Para evitar que dialog.dismiss() debería llamarse en view.postDelayed() después imm.hideSoftInputFromWindow() y en mi caso me puse demora 150.

5

tuve un problema similar cuando se cierra un diálogo de alerta. Esto parece hacer el truco para mí.

Dentro de su DialogFragment

public static void closeKB(final View view) 
{ 
    caller.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      InputMethodManager imm = (InputMethodManager) view.getContext().getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    }, 1); 
} 

@Override 
public void onDismiss(DialogInterface dialog) 
{ 
    super.onDismiss(dialog); 
      View view = getActivity().getCurrentFocus(); 
    if (view != null) 
    { 
     closeKB(view); 
    } 
} 
+0

¡Esto es lo único que funcionó para mí! ¡Gracias! –

Cuestiones relacionadas