Estoy mostrar un cuadro de diálogo con un edittext vista. Sin embargo, la softkeyboard sólo se puede abrir si el usuario presiona en el interior de la editview. Así que traté de llamar a un InputMethodManager con el siguiente código.

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

La dialogField es el campo de entrada. Sin embargo, cuando exactamente se supone que tengo que hacer esto? Lo he probado en el onStart() método del diálogo, pero no pasa nada. También traté de solicitar el enfoque para la dialogField antes, pero eso no cambia nada.

También he probado 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 sin teclado suave gustaría aparecer. Las Principales.registro es sólo un registro, el cual me muestra que la función se llama en realidad. Y sí, se llama.

Que pudiera tener el teclado con la SHOW_FORCED bandera antes de que el cuadro de diálogo se abre. Pero entonces no va a cerrar al salir. Y sólo puedo hacer eso ANTES de mostrar el cuadro de diálogo. Dentro de las devoluciones de llamada no funciona bien.

  • Has probado el SHOW_IMPLICIT bandera?
  • Esto es algo que he luchado con exceso, pero han sido incapaces de llegar a su trabajo correctamente.
  • Sí, he probado el SHOW_IMPLICIT bandera. La documentación dice exactamente, que debe llamar a showSoftInput, si se espera que el usuario haga de entrada para un TextEdit. Pero, ¿cómo?
  • Este fue respondida aquí, y funciona muy bien para mí.
InformationsquelleAutor Rene | 2010-11-23

3 Comentarios

  1. 166

    Impresionante pregunta, yo estaba tratando de hacer eso y encontrar una solución.

    Utilizando el cuadro de diálogo generador de clase AlertDialog.Builder tendrá que invocar el cuadro de 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ó muy bien para mí.

    Nota: usted debe import android.view.WindowManager.LayoutParams; para la constante de valor allí.

    • a mí me funciona, gracias
    • Me pregunto cómo afecta esto a la ventana de su comportamiento después de que el diálogo se cerrará… no olvidemos que la ventana que contiene el cuadro de diálogo y sus actividades, así
    • Esto no establece el teclado a un «siempre» comportamiento, este solo se activa al abrir el teclado método mientras que el cuadro de diálogo abrir. Una vez que el usuario presiona de nuevo la tecla» o deja el campo de entrada, el teclado se vuelve a cerrar, como normalmente lo haría.
    • Que totalmente trabajado para mí!! Gracias!!
    • No funciona en 4.1.
    • Para cualquier persona con el mismo problema, tenga en cuenta que setSoftInputMode() debe ser llamada antes de show().
    • para mí trabajado con ‘SOFT_INPUT_STATE_ALWAYS_VISIBLE’
    • no trabajo para mí, sigue abriendo el teclado sobre el que todos los elementos que… el uso de AlertDialogBuilder =(
    • Wow, muchas gracias! Por favor podemos añadir una donación o contribuir botón de MODO para mostrar aprecio?
    • Usted salvó mi día hermano.

  2. 4
     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);
    • ¿Por qué es la compensación de banderas buena?
  3. -3

    Parece ser imposible.

    Así que he hecho una nueva Actividad en lugar del Diálogo y permitir al usuario editar allí. Tenga en cuenta, que en las actividades se puede establecer el modo de teclado en el archivo de manifiesto. Me puse a mostrar, cuando la actividad se abre.

    También tenga en cuenta que la realización de pruebas en el emulador con las teclas no se abre el teclado para SHOW_IMPLICIT o 0 bandera.

    • Así que era esto nunca es posible?
    • Es posible, ver aceptado respuesta.
    • Hay no aceptó la respuesta 😛

Dejar respuesta

Please enter your comment!
Please enter your name here