2012-10-08 16 views
9

Estoy abriendo un Dialog dentro de un Activity. Cuando se abra el cuadro de diálogo, llamoOcultar el teclado de entrada suave cuando se cierra el cuadro de diálogo

((InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE)).toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY); 

El problema es, cuando cierro la ventana de diálogo o bien pulsando un botón de cancelar o hacer clic fuera del cuadro de diálogo, los conmutadores de teclado a un teclado de texto y no desaparece util I haga clic en el botón de retroceso de hardware. ¿Cómo puedo descartar el teclado cuando se descarta el diálogo y el foco vuelve a la ventana anterior?

+0

alguna solución para esto? – tactoth

Respuesta

1
AlertDialog.Builder builder = new AlertDialog.Builder(EllipticalActivity.this); 
builder.setTitle("title") 
     .setMessage("message") 
     .setCancelable(false) 
     .setNegativeButton("Close", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       InputMethodManager inputManager = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 
                InputMethodManager.HIDE_NOT_ALWAYS); 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
+0

Mirando su código, esto solo cerrará el teclado si hago clic en un botón. Me gustaría que se cierre por más de un motivo: hacer clic en un botón, hacer clic afuera o que el diálogo complete su tarea. Tiene más sentido simplemente detectar cuándo se descarta el diálogo, en lugar de enumerar todas las formas posibles en que se puede descartar la ventana. – gatzkerob

1

Supongo que este método de la actividad puede ser útil para usted.

@Override 
    public void onWindowFocusChanged(boolean hasFocus) { 
     // TODO Auto-generated method stub 
     super.onWindowFocusChanged(hasFocus); 
     if(hasFocus) 
     { 
      Toast.makeText(MainActivity.this, "has focus", Toast.LENGTH_LONG).show(); 
         // write code to remove keyboard 
     } 
    } 
0

En mi caso, la solución fue poner ocultar el teclado en el diálogo de despedir

dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { 
    @Override 
    public void onDismiss(DialogInterface dialog) { 
     View view = activity.getCurrentFocus(); 
     if (view != null) { 
      InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 
     } 
    } 
}); 
0

de la actividad onCreateView() método que se puede hacer esto:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN) 

O En manifiesto XML

android:windowSoftInputMode="stateAlwaysHidden" 

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

4

en AndroidManifest.xml, establezca esta propiedad en su Actividad que muestran el diálogo

androide: windowSoftInputMode = "stateAlwaysHidden"

¡Nota! no estadoHiddent, es stateAlwaysHidden. Ocultará automáticamente el teclado suave en Descartar de Diálogo.

Espero que salve tu vida.

+0

Gracias @Weiliang Chik, me salvaste el tiempo –

+0

@ParmarSubhash, ¿no es tu vida? – Faser

Cuestiones relacionadas