Estoy mostrando un cuadro de entrada usando AlertDialog
. El EditText
interior del cuadro de diálogo se enfoca automáticamente cuando llamo AlertDialog.show()
, pero el teclado virtual no se muestra automáticamente.
¿Cómo hago que el teclado virtual se muestre automáticamente cuando se muestra el cuadro de diálogo? (y no hay teclado físico / hardware). Similar a cómo cuando presiono el botón Buscar para invocar la búsqueda global, el teclado virtual se muestra automáticamente.
android
keyboard
android-edittext
soft-keyboard
Randy Sugianto 'Yuku'
fuente
fuente
Respuestas:
Puede crear un oyente de enfoque
EditText
en elAlertDialog
, luego obtener elAlertDialog
'sWindow
. Desde allí se puede hacer el espectáculo teclado de software llamandosetSoftInputMode
.fuente
final AlertDialog dialog = builder.create()
y luegoshow
en el diálogo en lugar del generador.Para mostrar el uso del teclado:
Para ocultar el uso del teclado:
fuente
Puede solicitar un teclado virtual inmediatamente después de crear el diálogo (prueba en SDK - r20)
fuente
Tuve el mismo problema y lo resolví con el siguiente código. No estoy seguro de cómo se comportará en un teléfono con teclado de hardware.
fuente
Encontré este ejemplo http://android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html . Agregue el siguiente código justo antes
alert.show()
.fuente
o
fuente
stateHidden
y cuando detecto que el usuario está creando un nuevo elemento, entonces visualizo el teclado usando la línea de código que ha mencionado. :) Una vez más, gracias.((Activity) context).getWindow()....
.Fragmentos de código de otras respuestas funcionan, pero no siempre es obvio dónde ubicarlos en el código, especialmente si está usando un
AlertDialog.Builder
y siguió el tutorial de diálogo oficial porque no usafinal AlertDialog ...
oalertDialog.show()
.Es preferible a
Debido a que SOFT_INPUT_STATE_ALWAYS_VISIBLE ocultará el teclado si el foco se aleja del EditText, donde SHOW_FORCED mantendrá el teclado visualizado hasta que se cierre explícitamente, incluso si el usuario regresa a la pantalla de inicio o muestra las aplicaciones recientes.
A continuación se muestra el código de trabajo para un AlertDialog creado usando un diseño personalizado con un EditText definido en XML. También configura el teclado para que tenga una tecla "ir" y le permite activar el botón positivo.
alert_dialog.xml:
AlertDialog.java:
fuente
Bueno, esta es una publicación bastante antigua, todavía hay algo que agregar.
Estos son 2 métodos simples que me ayudan a mantener el teclado bajo control y funcionan perfectamente:
Mostrar teclado
Ocultar teclado
fuente
getCurrentFocus()
?Activity
.Permítanme señalar información adicional a la solución de yuku, ¡porque me resultó difícil hacer que esto funcionara! ¿Cómo obtengo el objeto AlertDialog de mi AlertDialog.Builder? Bueno, es el resultado de mi
alert.show()
ejecución:fuente
Eche un vistazo a esta discusión que se encarga de ocultar y mostrar manualmente el IME. Sin embargo, tengo la sensación de que si un enfocado
EditText
no está activando el IME es porque está llamandoAlertDialog.show()
a suOnCreate()
o algún otro método que se evoca antes de que se presente la pantalla. MoverloOnPostResume()
debería solucionarlo en ese caso, creo.fuente
Sí, puedes hacerlo
setOnFocusChangeListener
, te ayudará.fuente
Sé que esta pregunta es antigua porque creo que usar una función de extensión es una forma más bonita de mostrar el teclado para editar texto
Aquí está el método que uso para mostrar el teclado para un texto de edición.
código kotlin: solo necesito llamar
edittext.showKeyboard()
el código de java:
fuente
Si alguien está recibiendo:
Intente agregar contexto a la llamada getSystemService.
Entonces
fuente
La pregunta original se refiere a Diálogos y mi EditText está en una vista normal. De todos modos, sospecho que esto debería funcionar para la mayoría de ustedes también. Entonces, esto es lo que funciona para mí (el método de mayor calificación sugerido anteriormente no hizo nada para mí). Aquí hay un EditView personalizado que hace esto (la subclasificación no es necesaria, pero me pareció conveniente para mis propósitos, ya que también quería tomar el foco cuando la vista se hace visible).
En realidad, esto es en gran medida lo mismo que la respuesta tidbecks. De hecho, no noté su respuesta en absoluto, ya que tenía cero votos. Luego estaba a punto de comentar su publicación, pero hubiera sido demasiado tiempo, así que terminé haciendo esta publicación de todos modos. tidbeck señala que no está seguro de cómo funciona con los dispositivos que tienen teclados. Puedo confirmar que el comportamiento parece ser exactamente el mismo en cualquier caso. Dicho esto, en el modo vertical, el teclado del software aparece y en el paisaje no. Tener el teclado físico deslizado o no hace ninguna diferencia en mi teléfono.
Porque, Yo he encontrado el comportamiento un poco extraño que opté por usar:
InputMethodManager.SHOW_FORCED
. Esto funciona como quería que funcionara. El teclado se vuelve visible independientemente de la orientación, sin embargo, al menos en mi dispositivo no aparece si el teclado de hardware se ha deslizado hacia afuera.fuente
El problema parece ser que, dado que el lugar donde ingresa el texto está oculto inicialmente (o anidado o algo así), AlertDialog está configurando automáticamente el indicador
WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
oWindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
para que las cosas no activen una entrada suave para que aparezca.La forma de solucionar esto es agregar lo siguiente:
fuente
prueba y usa:
fuente
Para mostrar el teclado, para mí, tuve que hacer lo siguiente
Android TextField: establece foco + entrada suave mediante programación
Esencialmente, la solución es la siguiente
Donde
ShowKeyboard
estaDespués de una entrada exitosa, también me aseguro de ocultar el teclado
fuente
Ponga estos métodos en su clase Util y úselos en cualquier lugar.
Kotlin
Java
fuente
Creé buenas funciones de extensión kotlin-esqe en caso de que alguien esté interesado
fuente
Esta es una buena muestra para ti:
fuente
¿Por qué esta respuesta? Porque la solución anterior mostrará su teclado, pero no desaparecerá si hace clic en cualquier otro lado
EditText
. Por lo tanto, debe hacer algo para que el teclado desaparezca cuandoEditText
pierda el foco.Puede lograr esto siguiendo los siguientes pasos:
Haga que la vista principal (vista de contenido de su actividad) sea clicable y enfocable agregando los siguientes atributos
Implemente un método hideKeyboard ()
Por último, configure onFocusChangeListener de su texto de edición.
fuente
Esto es un poco complicado. Lo hice de esta manera y funcionó.
1.En la primera llamada para ocultar la entrada suave de la ventana. Esto ocultará la entrada suave si el teclado virtual está visible o no hará nada si no lo está.
2. Muestra tu diálogo
3. Luego simplemente llame para alternar la entrada suave.
código:
fuente
Prueba esto
fuente
Intenté muchos, pero esto es lo que funcionó para mí (kotlin):
fuente
Mirando https://stackoverflow.com/a/39144104/2914140 simplifiqué un poco:
Es mejor que https://stackoverflow.com/a/11155404/2914140 :
porque cuando presiona el botón Inicio y se mueve a la pantalla de inicio, el teclado permanecerá abierto.
fuente
Llamo a esto en onCreate () para mostrar el teclado automáticamente, cuando entré en la Actividad.
fuente