android - sobre - Mostrar el teclado suave para el diálogo
manual de programacion android (3)
Parece ser imposible.
Así que hice 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 de disco duro no abrirán el teclado para SHOW_IMPLICIT o 0 flag.
Estoy mostrando un cuadro de diálogo con una vista de texto de edición. 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.
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
El campo de diálogo 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é este 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.
Pregunta increíble, yo estaba tratando de hacer eso también y encontré una solución.
Usando la clase de generador de diálogo AlertDialog.Builder
, tendrá que invocar el diálogo de esta manera:
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 mi.
Nota: debe import android.view.WindowManager.LayoutParams;
por el valor constante allí.
AlertDialog dialog = new AlertDialog.Builder(this).create();
dialog.show();
Window window = dialog.getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);