2010-11-23 16 views
47

Estoy mostrando un cuadro de diálogo con una vista de texto editable. Sin embargo, el teclado se abrirá solo si el usuario presiona dentro de editview. Así que intenté llamar a un InputMethodManager con el siguiente código.Mostrar el teclado virtual para el cuadro de diálogo

InputMethodManager imm = 
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); 
imm.showSoftInput(dialogField,0); 

dialogField es el campo de entrada. Sin embargo, ¿cuándo se supone que debo hacer esto? Lo intenté en el método onStart() del diálogo, pero no ocurre nada. También intenté solicitar el enfoque para el cuadro de diálogo Campo antes, pero eso no cambia nada.

También probé el código

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener() 
{ 
    public void onFocusChange (View v, boolean hasFocus) 
    { 
     if (hasFocus) 
     { 
      Main.log("here"); 
      dialogInput.getWindow().setSoftInputMode(
       WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); 
      /* 
       InputMethodManager mgr = 
        (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
       mgr.showSoftInput(dialogField,0); 
      */ 
     } 
    } 
}); 

en ambas versiones. Pero a ningún teclado suave le gustaría aparecer. Main.log es solo un registro, que me muestra que realmente se llama a la función. Y sí, se llama.

Pude obtener el teclado con el indicador SHOW_FORCED antes de que se abra el cuadro de diálogo. Pero luego no se cerrará al salir. Y solo puedo hacer eso ANTES de mostrar el diálogo. Dentro de las devoluciones de llamada tampoco funciona.

+0

¿Has probado la bandera SHOW_IMPLICIT? –

+1

Esto es algo con lo que he luchado excesivamente pero que no he podido ponerme a trabajar correctamente. – Thomas

+0

Sí, probé el indicador SHOW_IMPLICIT. La documentación dice exactamente que debe llamar a showSoftInput, si se espera que el usuario haga una entrada para un TextEdit. ¿Pero cómo? – Rene

Respuesta

-3

Parece imposible.

Realicé una nueva actividad en lugar del cuadro de diálogo y permití que el usuario editara allí. Tenga en cuenta que en actividades puede establecer el modo de teclado en el archivo de manifiesto. Lo configuro para mostrar, cuando se abre la actividad.

También tenga en cuenta que las pruebas en el emulador con las teclas no abrirán el teclado para SHOW_IMPLICIT o 0.

+1

Entonces, ¿esto nunca fue posible? –

+0

Es posible, ver respuesta aceptada. –

+0

@MertSerimer No hay una respuesta aceptada: P – SparK

130

Increíble pregunta, estaba tratando de hacer eso también y encontré una solución.

Utilización de la clase constructor de diálogo AlertDialog.Builder tendrá que invocar el diálogo como este:

AlertDialog.Builder builder = new AlertDialog.Builder(); 
AlertDialog dialog; 

builder.set... 

dialog = builder.create(); 
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); 
dialog.show(); 

Esto funcionó bien para mí.

Nota: debe import android.view.WindowManager.LayoutParams; para el valor constante allí.

+1

funciona para mí, gracias – ericn

+0

Me pregunto cómo esto afecta el comportamiento de la ventana después de que se cierre el cuadro de diálogo ... no olvidemos que la ventana contiene el diálogo y sus actividades también –

+0

Esto no no establece el teclado en un comportamiento "siempre encendido", esto solo activa el método de teclado abierto mientras se abre el diálogo. Una vez que el usuario presione la tecla "Atrás" o abandone el campo de entrada, el teclado se cerrará nuevamente, como lo haría normalmente. – SparK

Cuestiones relacionadas