Me gustaría alterar el diseño en función de si se muestra o no el teclado virtual. He buscado en la API y en varios blogs, pero parece que no puedo encontrar nada útil.
¿Es posible?
¡Gracias!
android
events
android-softkeyboard
Sander Versluys
fuente
fuente

Respuestas:
Nota
Tienes que manejar los cambios de configuración tú mismo.
http://developer.android.com/guide/topics/resources/runtime-changes.html#HandlingTheChange
Muestra:
Luego, simplemente cambie la visibilidad de algunas vistas, actualice un campo y cambie su archivo de diseño.
fuente
newConfig.keyboardHidden == Configuration.KEYBOARDHIDDEN_NO~ ChrisEsta puede no ser la solución más efectiva. Pero esto funcionó para mí cada vez ... Llamo a esta función donde necesito escuchar el softKeyboard.
Nota: Este enfoque causará problemas si el usuario usa un teclado flotante.
fuente
android:windowSoftInputMode="adjustPan", oadjustResizecon una ventana de pantalla completa, ya que el diseño nunca cambia de tamaño.Si desea manejar mostrar / ocultar la ventana del teclado IMM (virtual) desde su Actividad, deberá subclasificar su diseño y anular el método onMesure (para que pueda determinar el ancho medido y la altura medida de su diseño). Después de eso, establezca el diseño subclasificado como vista principal para su Actividad mediante setContentView (). Ahora podrá manejar los eventos de ventana mostrar / ocultar IMM. Si esto suena complicado, en realidad no es así. Aquí está el código:
main.xml
Ahora dentro de su Actividad, declare la subclase para su diseño (main.xml)
Puede ver en el código que inflamos el diseño de nuestra Actividad en el constructor de subclase
Y ahora solo configure la vista de contenido del diseño subclasificado para nuestra Actividad.
fuente
android:windowSoftInputMode="adjustPan", oadjustResizecon una ventana de pantalla completa, ya que el diseño nunca cambia de tamaño.Hice de esta manera:
Agregar
OnKeyboardVisibilityListenerinterfaz.HomeActivity.java :
Espero que esto te ayude.
fuente
Basado en el Código de Nebojsa Tomcic, he desarrollado la siguiente Subclase RelativeLayout:
Esto funciona bastante bien ... Marque, que esta solución simplemente funcionará cuando el Modo de entrada suave de su Actividad esté configurado en "WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE"
fuente
android:windowSoftInputMode="adjustPan", oadjustResizecon una ventana de pantalla completa, ya que el diseño nunca cambia de tamaño.Al igual que la respuesta de @ amalBit, registre un oyente en el diseño global y calcule la diferencia de la parte inferior visible de dectorView y su parte inferior propuesta, si la diferencia es mayor que algún valor (altura de IME adivinada), creemos que IME está arriba:
el umbral de altura 100 es la altura mínima adivinada de IME.
Esto funciona tanto para ajustarPan como para ajustarResize.
fuente
La solución de Nebojsa casi me funcionó. Cuando hice clic dentro de un EditText de varias líneas, sabía que se mostraba el teclado, pero cuando comencé a escribir dentro de EditText, la altura real y la altura propuesta seguían siendo las mismas, por lo que no sabía que todavía se mostraba el teclado. Hice una ligera modificación para almacenar la altura máxima y funciona bien. Aquí está la subclase revisada:
fuente
No estoy seguro si alguien publica esto. ¡Encontré esta solución simple de usar! . La clase SoftKeyboard está en gist.github.com . Pero mientras la devolución de llamada del evento emergente / oculto del teclado necesitamos un controlador para hacer correctamente las cosas en la interfaz de usuario:
fuente
Resuelvo esto anulando onKeyPreIme (int keyCode, KeyEvent event) en mi EditText personalizado.
fuente
Tengo una especie de truco para hacer esto. Aunque no parece haber una forma de detectar cuándo se ha mostrado u ocultado el teclado virtual, de hecho puede detectar cuándo está a punto de mostrarse u ocultarse configurando un botón
OnFocusChangeListeneren elEditTextque está escuchando.NOTA: Una cosa a tener en cuenta con este truco es que esta devolución de llamada se dispara inmediatamente cuando
EditTextgana o pierde el foco. Esto realmente disparará justo antes de que se muestre u oculte el teclado virtual. La mejor manera que he encontrado para hacer algo después de que el teclado muestra u oculta es usarHandleray retrasar algo ~ 400 ms, así:fuente
OnFocusChangeListenersolo dice siEditTexttiene foco después de que el estado cambió. PeroIMEpuede estar oculto cuandoEditTexttiene foco, ¿cómo detectar este caso?Sander, creo que estás intentando mostrar la vista bloqueada por el teclado virtual. Pruebe esto http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html .
fuente
He resuelto el problema en la codificación posterior de vista de texto de una sola línea.
fuente
También puede verificar el primer relleno inferior infantil de DecorView. Se establecerá en un valor distinto de cero cuando se muestre el teclado.
fuente
Ocultar | Mostrar eventos para el teclado se puede escuchar a través de un simple hack en OnGlobalLayoutListener:
Aquí activityRootView es la vista raíz de su Actividad.
fuente
usando viewTreeObserver para obtener fácilmente el evento del teclado.
** layout_parent es tu vista como
edit_text.parentfuente
La respuesta de Nebojsa Tomcic no fue útil para mí. Tengo
RelativeLayoutconTextViewyAutoCompleteTextViewdentro de ella. Necesito desplazarmeTextViewhacia la parte inferior cuando se muestra el teclado y cuando está oculto. Para lograr esto, anulé elonLayoutmétodo y funciona bien para mí.fuente