Translúcido en Android y ajuste.


La capacidad de usar translúcido en Android apareció en KITKAT . Y se ve bastante impresionante en el diseño correcto. Y con el advenimiento de la moda para dispositivos con "Bangs", parece ser simplemente algo necesario en cualquier inicio de lámpara cálida.


Imaginemos una situación: ha capturado un diseño increíble que se desplaza bajo StatusBar y NavigationBar. Y entonces agrega el campo de entrada y comprende que ajusteResize no funciona para usted.


Usted puede:


  1. Para martillar, el usuario cerrará el teclado él mismo para ver qué hay debajo.
  2. Rechace lo translúcido , el estilo no es suyo, todo será viejo, confiable, como todos los demás.
  3. Tan pronto como el usuario comience a desplazarse, oculte el teclado. ¡Estás bien hecho! Hicieron todo bien, ¡Skype lo hace incluso bajo iOS! Y tampoco hay transparencia allí.
  4. Mueva todos los campos de entrada a pantallas separadas. Como beneficio adicional: cada transición adicional a la pantalla, menos la comodidad y la conversión.
  5. Enjuague su ajuste Cambiar tamaño .

Todas las dificultades de translúcido


Existen varias dificultades para implementar translúcido :


  1. Es necesario tener en cuenta el diseño para dispositivos más pequeños que KITKAT (creo que en 2019, esto casi no es relevante, especialmente para nuevos proyectos). Quizás para dispositivos más pequeños que LOLLIPOP, ¿ quizás el juego no valga la pena? Allí no puede obtener una barra de navegación transparente y el "Chulok" en tales dispositivos tampoco estaba allí.
  2. Si está pensando en translúcido , lo más probable es que desee algo más complicado que un fondo estático, algo que se desplaza debajo de StatusBar y NavigationBar, algo que no se puede hacer con fitsSystemWindows , lo que significa que debe sustituir dinámicamente la altura de StatusBar y NavigationBar.
  3. Y, por último, lo principal: ajustarResizar funciona solo sin translúcido o para las vistas que se ajustan a Windows del sistema .

De qué se trata y cómo debería funcionar



Resolución de problemas


Parece ser una solución simple: ajusteResize no funciona, por lo que debe responder a la apertura del teclado usted mismo. Pero el problema de Android no proporciona no solo la altura del teclado que se abre (y puede ser diferente incluso para diferentes campos EditText), sino incluso el hecho de su apertura o cierre. No hay forma oficial. ¿Cómo es que google?


¡Por supuesto que hay una solución! Y cuando tenga información sobre la altura actual del teclado, puede hacer lo que quiera con él: agregue relleno o margen desde la parte inferior para aquellas vistas que deberían responder al teclado y ahora el ajuste personalizadoResize está listo.


Código


Para entender que el teclado estaba abierto, se utiliza OnGlobalLayoutListener . Pegue piezas de código en la publicación No veo el punto. ¿Por qué escribir 100 líneas de lo que se expresa en 50 códigos?
La solución se presenta en el repositorio .


Eche un vistazo a KeyboardHeightProvider y BaseTranslucentActivity .


El proyecto es lo más simple posible, comprensible, no hay nada superfluo que no se aplique al problema.
Hay un ejemplo para un TextView simple, RecyclerView y ScrollView. La misma técnica ha sido probada y funciona muy bien para NestedScrollView, NestedFragments, CoordinatorLayout, ViewPager, etc.


Ps: https://developer.android.com/reference/android/view/WindowInsets no resuelve el problema del teclado.

Source: https://habr.com/ru/post/es436646/


All Articles