Tengo un Activity
donde hay 5 EditText
s. Cuando el usuario hace clic en el primero EditText
, el teclado virtual se abre para ingresar algún valor. Quiero establecer View
la visibilidad de otros paraGone
cuando el teclado virtual se abre y también cuando el usuario hace clic en el primero EditText
y también cuando el teclado virtual se cierra desde el mismo EditText
al presionar el botón Atrás. Entonces quiero establecer View
la 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.
X
y laY
ubicación caen sobre / sobre el teclado =>SecurityException
=> decrementoY
e intente nuevamente => hasta que no se produzca ninguna excepción => ElY
valor actual es la altura del teclado. 2. si el teclado no está abierto => noSecurityException
.SecurityException
se lanza a => el teclado está abierto. De lo contrario, el teclado está cerrado.EditText
no para el otroEditText
. ¿Cómo puedo distinguir esto?Respuestas:
Esto solo funciona cuando
android:windowSoftInputMode
su actividad está configurada enadjustResize
en 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
setOnFocusChangeListener
llamará 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
setOnFocusChangeListener
llamará 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á?onfocus
oyente 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
adjustResize
FragmentActivity, 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
contentViewTop
siempre es0
y queonShowKeyboard(...)
siempre se llama.Tuve el mismo problema y descubrí el problema que tenía. Usé un en
AppCompatActivity
lugar de un "normal"Activity
. En este caso seWindow.ID_ANDROID_CONTENT
refiere a unContentFrameLayout
y no alFrameLayout
valor 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=adjustResize
y 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 > 0
Esta 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 enprevContentHeight
variable 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:windowSoftInputMode
Paso 1: amplíe la clase EditText y anule estos dos:
Paso 2: crea estos dos en tu actividad:
*** recuerde para poder
clearFocus
trabajar, 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