Preparación de la aplicación para Android Q. Parte 2

La traducción del artículo fue preparada específicamente para los estudiantes del curso "Desarrollador de Android". Curso básico " . También le recordamos que seguimos inscribiéndonos en el curso avanzado "Especialización para desarrolladores de Android"




La privacidad y la seguridad se pueden encontrar en la primera parte del artículo.

2) Experiencias de usuario


a) Gestos de navegación




En Android Q, Google trató de combinar todos los gestos de navegación con el nuevo sistema de gestos de navegación, que reemplazó a la barra de navegación flotante (atrás, inicio y aplicaciones recientes).

  • Lo que afecta: si su aplicación contiene gestos, entonces pueden entrar en conflicto con los gestos del sistema. Esto afectará a todas las aplicaciones que se ejecutan en Android Q (independientemente del SDK de destino), ya que los gestos del sistema se procesarán primero.
  • Enfoque recomendado: dado que la barra de navegación flotante prácticamente ha desaparecido, se recomienda que aproveche al máximo el nuevo espacio de pantalla disponible y proporcione a los usuarios un efecto inmersivo.

Para crear un efecto inmersivo, las aplicaciones deben aparecer detrás de la barra de estado y la barra de navegación. Primero, haga que la barra de estado y la barra de navegación sean transparentes.

<style name="AppTheme"> ...... <item name="android:navigationBarColor">@android:color/transparent</item> <!-- Optional, but recommended for full edge-to-edge rendering --> <item name="android:statusbarColor">@android:color/transparent</item> </style> 

A continuación, hacemos que la Activity/View visualización se muestre en pantalla completa:

 view.systemUiVisibility = //Layout as if the navigation bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION or //Layout as if the status bar was hidden View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or //Layout at its most extreme View.SYSTEM_UI_FLAG_LAYOUT_STABLE 



FAB (botón de acción flotante) está cubierto por una barra de navegación flotante. Se incluye una barra de navegación flotante para mayor claridad.

Ahora que la aplicación se muestra en modo de pantalla completa detrás de los componentes del sistema (transparente), es posible que la interfaz de usuario del sistema bloquee algún tipo de componente de aplicación interactiva. Para resolver este problema, use Insets.

Insets es un conjunto de valores que nos dirá cuánto mover la Vista para que no entren en conflicto con la interfaz de usuario del sistema. Esta información es proporcionada por la clase WindowInset . A partir de API 20, Android proporciona a los desarrolladores Inserciones de ventanas del sistema, que le indican cuánto espacio ocupan los componentes del sistema (como la barra de navegación flotante y la barra de estado). Esta información se puede usar para mover la Vista interactiva para que el usuario la toque y no en la IU del sistema.

 root.setOnApplyWindowInsetsListener { _, insets -> val fabLp = fab.layoutParams as CoordinatorLayout.LayoutParams fabLp.bottomMargin = fabOriginalBottomMargin + insets.systemWindowInsetBottom fab.layoutParams = fabLp insets.consumeSystemWindowInsets() } 

Para FAB, configure el escucha WindowsInsets y aplique el recuadro de la ventana inferior como la sangría inferior.

Del mismo modo, comenzando con Android Q, el sistema proporciona inserciones de gestos de navegación para mover las vistas deslizantes para que no entren en conflicto con los gestos del sistema. Se proporcionan a través de Insets.getSystemGestureInsets ()


Las áreas de gestos del sistema se resaltan en amarillo.

Pero, ¿qué sucede si no queremos mover la Vista y queremos colocar algún contenido en esas zonas de gestos que pueden entrar en conflicto con la aplicación? En estos escenarios, la aplicación puede determinar las áreas en las que la aplicación manejará primero el evento táctil, en lugar de los gestos del sistema. Esto se puede hacer pasando List< Rect > a la API View.setSystemGestureExclusionRects () proporcionada en Android Q. Este método también está disponible en ViewCompat con androidx.core:core:1.1.0 .

  • Errores: puede negarse a procesar solo los gestos de retroceso. Los límites del gesto de "casa" están reservados y no se pueden redefinir. Esto se debe a que solo hay una forma de salir de la aplicación. Si su aplicación entra en conflicto con el gesto de "inicio", use WindowInsets.getMandatorySystemGestureInsets() para obtener sus bordes y cambiar su Vista.

b) Tema oscuro


Durante el año pasado, hemos visto que muchas aplicaciones comienzan a admitir temas oscuros. Android Q agrega este interruptor a la configuración del sistema.

El usuario puede habilitar el tema oscuro de tres maneras:

  1. Un nuevo elemento en la configuración del sistema (Configuración -> Pantalla -> Tema)
  2. Nuevo elemento en Configuración rápida
  3. Dependiendo del fabricante, se puede encender a través del modo de ahorro de energía.

Para admitir la configuración de todo el sistema de Dark Theme, el tema predeterminado de su aplicación debe heredar del tema DayNight. Esto conecta el tema principal de la aplicación con las banderas de modo nocturno controladas por el sistema. Esto funciona extrayendo recursos de las carpetas del calificador night .

 <!--App Compat Style--> <style name="AppTheme" parent="Theme.AppCompat.DayNight"> <!--Material Components--> <style name="AppTheme" parent="Theme.MaterialComponents.DayNight"> 

Si observa los estilos de App Compat, notará que el tema DayNight apunta a AppCompat Light en la configuración predeterminada y AppCompat en la configuración nocturna.

 <!--values/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat.Light"> <!--values-night/themes.xml--> <style name="Theme.AppCompat.DayNight" parent="Theme.AppCompat"> 

Si desea dar a los usuarios la capacidad de controlar el tema desde la aplicación, puede llamar a AppCompatDelegate.setDefaultNightMode () , que acepta uno de los cuatro modos:

  1. MODE_NIGHT_YES - Mostrar tema oscuro
  2. MODE_NIGHT_NO - Muestra un tema brillante
  3. MODE_NIGHT_FOLLOW_SYSTEM - Sigue la configuración del sistema
  4. MODE_NIGHT_AUTO_BATTERY : MODE_NIGHT_AUTO_BATTERY tema oscuro cuando el dispositivo entra en modo de ahorro de energía.

  • Trampas:

a) No codifique los colores. Si hay colores codificados en los archivos de diseño, esta es una llamada de atención. Reemplácelos con enlaces a color . Aún mejor: use atributos para referirse a los colores.

b) Verifique las imágenes y bríndeles recursos alternativos como parte del clasificador night .

c) No debe haber colores revestidos en dibujos vectoriales. Use tint para diseñar recursos vectoriales con el color correcto.

d) Asegúrese de que todos color recursos de color tengan alternativas correspondientes en la carpeta night ( values-night/colors.xml )

e) Si una aplicación usa RemoteViews para notificaciones o widgets, asegúrese de probarlos también. Es bueno que la aplicación use los estilos de notificación predeterminados, ya que el sistema los procesará.

f) Se uiMode un cambio de configuración para uiMode cada vez que el dispositivo cambia entre modo normal y oscuro. El usuario puede hacer esto manualmente o activar el modo de ahorro de energía. Si la aplicación no maneja los cambios de configuración correctamente, la interfaz de usuario pierde contexto cuando el dispositivo cambia entre los modos normal y oscuro, porque las actividades visibles y sus fragmentos se destruyen y se recrean. Por lo tanto, incluso si la IU está bloqueada en la misma orientación, agregue soporte para cambios de configuración. Además, si la aplicación administra manualmente los cambios de configuración a través de android:configChanges , existe una alta probabilidad de que también desee administrar manualmente uiMode . Por ejemplo, si una aplicación usa reproducción continua (reproductor de video), es posible que no quiera interrumpir la reproducción solo porque el dispositivo ha cambiado entre el modo normal y oscuro.

Android Q también introdujo muchas otras cosas que no discutí en detalle, como el Panel de configuración, la nueva API AudioPlaybackCapture (la API permite que las aplicaciones copien el sonido reproducido por otras aplicaciones. Esta función es similar a la captura de pantalla, pero para audio).

Finalmente, Android Q incluye una lista actualizada de interfaces limitadas no específicas del SDK, a las que finalmente se les puede negar el acceso desde el SDK de Android. Puede encontrar una lista de sus infracciones en la consola de reproducción en la sección "Informe previo al lanzamiento".

Eso es todo. Si cree que hay algo importante que no se menciona en el artículo, hágamelo saber en los comentarios a continuación. ;-)

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


All Articles