Tengo un Activitydonde hay 5 EditTexts. Cuando el usuario hace clic en el primero EditText, el teclado virtual se abre para ingresar algún valor. Quiero establecer Viewla visibilidad de otros paraGone cuando el teclado virtual se abre y también cuando el usuario hace clic en el primero EditTexty también cuando el teclado virtual se cierra desde el mismo EditTextal presionar el botón Atrás. Entonces quiero establecer Viewla visibilidad de otros en visible.
¿Hay algún oyente o devolución de llamada o algún truco para cuando el teclado virtual se abre con un clic en el primer EditText en Android?

trying to detect the virtual keyboard height in Android.Xy laYubicación caen sobre / sobre el teclado =>SecurityException=> decrementoYe intente nuevamente => hasta que no se produzca ninguna excepción => ElYvalor actual es la altura del teclado. 2. si el teclado no está abierto => noSecurityException.SecurityExceptionse lanza a => el teclado está abierto. De lo contrario, el teclado está cerrado.EditTextno para el otroEditText. ¿Cómo puedo distinguir esto?Respuestas:
Esto solo funciona cuando
android:windowSoftInputModesu actividad está configurada enadjustResizeen el manifiesto. Puede usar un escucha de diseño para ver si el teclado cambia el tamaño del diseño raíz de su actividad.Utilizo algo como la siguiente clase base para mis actividades:
La siguiente actividad de ejemplo usa esto para ocultar una vista cuando se muestra el teclado y mostrarlo nuevamente cuando el teclado está oculto.
El diseño xml:
Y la actividad:
fuente
rootLayout = (ViewGroup) findViewById(R.id.rootLayout);a partir?Pedazo de pastel con la impresionante biblioteca KeyboardVisibilityEvent
Créditos de Yasuhiro SHIMIZU
fuente
Como Vikram señaló en los comentarios, detectar si el teclado virtual se muestra o ha desaparecido solo es posible con algunos trucos feos.
Tal vez sea suficiente establecer un oyente de enfoque en el texto de edición :
fuente
setOnFocusChangeListenerllamará al oyente, luego presiono hacia atrás y luego cierra el teclado, pero no hice clic en otras vistas, ahora nuevamente hago clic en el mismo texto de edición que ya tiene el foco, ¿qué sucederá?onFocusChange()no se llamará.Para la actividad:
Para el fragmento:
fuente
android:windowSoftInputMode="adjustResize"en manifiesto?La respuesta de Jaap no funcionará para AppCompatActivity. En su lugar, obtenga la altura de la barra de estado y la barra de navegación, etc. y compárela con el tamaño de la ventana de su aplicación.
Al igual que:
fuente
Puedes probarlo:
fuente
Puede usar mi función de extensión Rx (Kotlin).
Ejemplo:
fuente
dip()ygetScreenHeight()El siguiente código me funciona,
fuente
Si puede, intente extender EditText y anule el método 'onKeyPreIme'.
¿Cómo puedes extenderlo?
Creo que el recálculo de la altura de la pantalla no es 100% exitoso como se mencionó anteriormente. Para ser claros, la anulación de 'onKeyPreIme' no se llama a los métodos de 'ocultar teclado programado', PERO si lo está haciendo en cualquier lugar, debe hacer la lógica 'onKeyboardHidden' allí y no crear soluciones integrales.
fuente
fuente
setOnFocusChangeListenerllamará al oyente, luego presiono hacia atrás y luego cierra el teclado, pero no hice clic en otras vistas, ahora nuevamente hago clic en el mismo texto de edición que ya tiene el foco, ¿qué sucederá?onfocusoyente nunca llama, eso es lo que estoy buscando, no lo que está sugiriendoUsa esta clase,
En
Android Manifest,android:windowSoftInputMode="adjustResize"es necesario.PD: Completamente tomado de aquí .
fuente
Para el caso de
adjustResizeFragmentActivity, la solución aceptada de @Jaap no funciona para mí.Aquí está mi solución:
fuente
Un enfoque diferente sería verificar cuándo el usuario dejó de escribir ...
Cuando un TextEdit está enfocado (el usuario está / estaba escribiendo), puede ocultar las vistas (escucha del foco)
y use un Handler + Runnable y un oyente de cambio de texto para cerrar el teclado (independientemente de su visibilidad) y mostrar las vistas después de algún retraso.
Lo principal a tener en cuenta sería la demora que use, que dependería del contenido de estos TextEdits.
fuente
Este código funciona muy bien
use esta clase para la vista raíz:
}
y configure el oyente del teclado en actividad o fragmento:
fuente
Puede manejar la visibilidad del teclado anulando dos métodos en su Actividad:
onKeyUp()yonKeyDown()más información en este enlace: https://developer.android.com/training/keyboard-input/commandsfuente
Lamentablemente, no tengo una reputación lo suficientemente alta como para comentar la respuesta de Jaap van Hengstum. Pero leí algunos comentarios de personas, teniendo el problema de que
contentViewTopsiempre es0y queonShowKeyboard(...)siempre se llama.Tuve el mismo problema y descubrí el problema que tenía. Usé un en
AppCompatActivitylugar de un "normal"Activity. En este caso seWindow.ID_ANDROID_CONTENTrefiere a unContentFrameLayouty no alFrameLayoutvalor superior correcto. En mi caso, estaba bien usar el 'normal'Activity, si tienes que usar otro tipo de actividad (acabo de probar elAppCompatActivity, tal vez también es un problema con otros tipos de actividad como elFragmentActivity), tienes que acceder alFrameLayout, que es un antepasado de laContentFrameLayout.fuente
cuando se muestra el teclado
es cierto, de lo contrario esconderse
fuente
He modificado un poco la respuesta aceptada de Jaap. Pero en mi caso, hay pocas suposiciones como
android:windowSoftInputMode=adjustResizey el teclado no aparece al principio cuando se inicia la aplicación. Y también, supongo que la pantalla en relación con la altura de los padres.contentHeight > 0Esta comprobación me permite saber si la pantalla correspondiente está oculta o se muestra para aplicar la escucha de eventos de teclado para esta pantalla específica. También paso la vista de diseño de la pantalla correspondiente enattachKeyboardListeners(<your layout view here>)elonCreate()método de mi actividad principal . Cada vez que cambia la altura de la pantalla correspondiente, la guardo enprevContentHeightvariable para verificar más adelante si el teclado se muestra u oculta.Para mí, hasta ahora ha funcionado bastante bien. Espero que también funcione para otros.
fuente
La respuesta de "Jaap van Hengstum" funciona para mí, pero no es necesario configurar "android: windowSoftInputMode" como acaba de decir.
Lo he hecho más pequeño (ahora solo detecta lo que quiero, en realidad un evento de mostrar y ocultar el teclado):
y no olvides agregar esto
fuente
Esto funcionará sin necesidad de cambiar la actividad de usted.
android:windowSoftInputModePaso 1: amplíe la clase EditText y anule estos dos:
Paso 2: crea estos dos en tu actividad:
*** recuerde para poder
clearFocustrabajar, debe hacer que el padre o el primer hijo de la jerarquía principal se puedan enfocar.fuente
Esto no funciona como se desea ...
... he visto muchos cálculos de tamaño de uso para verificar ...
Quería determinar si estaba abierto o no y encontré
isAcceptingText()así que esto realmente no responde a la pregunta, ya que no aborda la apertura o el cierre, sino que más bien está abierto o cerrado, por lo que es un código relacionado que puede ayudar a otros en varios escenarios ...
en una actividad
en un fragmento
fuente
consulte con el siguiente código:
CÓDIGO XML:
CÓDIGO JAVA:
fuente