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.
¿Has probado la bandera SHOW_IMPLICIT? –
Esto es algo con lo que he luchado excesivamente pero que no he podido ponerme a trabajar correctamente. – Thomas
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