2011-09-01 47 views
9

Tengo un cuadro de diálogo de alerta con un editor de texto. Para este Edittext hago aparecer el teclado y quiero que cuando el usuario presione ok o cancel para ocultar el teclado. El extraño problema es que cuando el usuario elige "ok", el teclado está oculto, pero cuando elige "cancelar" el teclado no oculta un "estoy usando el mismo código para ambos casos".Ocultar teclado en AlertDialog

Aquí está mi código:

final AlertDialog.Builder alert = new AlertDialog.Builder(this); 

     alert.setTitle(data); 
     final EditText input = new EditText(this); 
     InputFilter[] FilterArray = new InputFilter[1]; 
     FilterArray[0] = new InputFilter.LengthFilter(25); 
     input.setFilters(FilterArray); 
     input.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       InputMethodManager keyboard = (InputMethodManager) 
       getSystemService(Context.INPUT_METHOD_SERVICE); 
       keyboard.showSoftInput(input, 0); 
      } 
     },200); 



     alert.setView(input); 

     alert.setPositiveButton(ok, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int whichButton) { 
       text = input.getText().toString().trim(); 
       Canvas c = new Canvas(bitmapResult); 
       drawTextImage(bitmapResult); 
       saveimage(); 
       InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
       imm.hideSoftInputFromWindow(input.getWindowToken(), 0); 
      } 
     }); 

     alert.setNegativeButton(cancel, 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         dialog.cancel(); 
         saveimage(); 
         InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
         im.hideSoftInputFromWindow(input.getWindowToken(), 0); 
        } 
       }); 

     alert.show(); 

dónde está mi mystake? ¿Alguien puede ayudarme?

+1

He estado buscando por todas partes para el código que obligaría al teclado para mostrar en el cuadro de diálogo para una EDITTEXT. Quién sabía que tenía que retrasarlo unos pocos milisegundos primero. ¡Gracias! – electrichead

+1

Una buena solución para mostrar el teclado :) Tuve uno que no funcionaba para versiones inferiores de Android, pero el suyo es genial. La demora incluso se puede sentir como animación;) – Poutrathor

Respuesta

22

he encontrado la solución:

alert.setNegativeButton(cancel, 
    new DialogInterface.OnClickListener() { 
     public void onClick(DialogInterface dialog, int whichButton) { 
      saveimage(); 
      InputMethodManager im = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
      im.hideSoftInputFromWindow(input.getWindowToken(), 0); 
      dialog.cancel(); 
     } 
    }); 

que debería haber puesto dialog.cancel() después de ocultar el teclado.

+0

dialog.cancel después de ocultar el teclado hizo el truco. – chengsam

0
No

seguro, pero se puede tratar con la adición de esto:

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

lo estoy usando para evitar la primera pantalla del teclado cuando mi aplicación se inicia ... cuando hago clic en el campo, la teclado todavía está abierta ...

Así que, tal vez, podría funcionar con su código:

keyboard.showSoftInput(input, 0); 

y luego automáticamente cerrarla ...

7

Yo también estaba luchando con esto y me asusté en casi todas las "soluciones" que se publicaron, pero el maldito teclado todavía no se cerraba. Luego tuve una visión caffenated:

  InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
      imm.hideSoftInputFromWindow(dialog.getWindow().getDecorView().getWindowToken(), InputMethodManager.HIDE_IMPLICIT_ONLY); 
     } 

Nota la esperanza HIDE_IMPLICIT_ONLY

que ayuda a cualquier otra persona que lucha con este problema.

+0

Wow, era escéptico de que esto funcionaría, como tú, todas las demás soluciones de SO no me funcionaron, ¡pero en realidad funcionó! +1 – Justin

+0

1+ para una opción sin la necesidad de una referencia de EditText – Shirane85

0

Utilice el método siguiente antes de utilizar dialog.cancel();

public static void hideSoftKeyboardUsingView(Context context,View view) { 

    InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); 
    imm.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); 

} 
Cuestiones relacionadas