Cómo garantizar la compatibilidad con la navegación por gestos

A partir de Android 10 (nivel de API 29), el sistema Android admite la navegación completamente basada en gestos. Los desarrolladores de apps deben tomar dos medidas para asegurarse de que sus apps sean compatibles con esta función:

  • Extender el contenido de la app de borde a borde
  • Ocuparse de los gestos conflictivos de la app

Además, Android 13 (nivel de API 33) presenta un gesto atrás predictivo para dispositivos Android, como teléfonos, pantallas grandes y dispositivos plegables, que forma parte de un lanzamiento de varios años. Los desarrolladores de apps pueden tomar medidas para asegurarse de que sus apps admitan el gesto atrás predictivo.

Cómo proporcionar contenido de borde a borde de la app

Para aprovechar el espacio de pantalla adicional que ofrece la barra de navegación flotante, debes configurar ciertos cambios en tu app.

Para obtener más información, consulta Cómo mostrar contenido de borde a borde en tu app.

Cómo resolver gestos de apps conflictivos

El modelo de navegación por gestos puede entrar en conflicto con gestos que antes utilizaban los desarrolladores de apps. En consecuencia, es posible que debas realizar ajustes en la interfaz de usuario de tu app.

Conflictos con los gestos de retroceso

El nuevo gesto del sistema para retroceder es un deslizamiento hacia adentro desde el borde izquierdo o el derecho de la pantalla. Esto podría interferir con los elementos de navegación de la app en esas áreas. Para mantener la funcionalidad de los elementos en los bordes izquierdo y derecho de la pantalla, inhabilita el gesto atrás de forma selectiva indicando al sistema qué regiones necesitan recibir la entrada táctil. Para ello, pasa un List<Rect> a la API de View.setSystemGestureExclusionRects() que se introdujo en Android 10. Este método también está disponible en ViewCompat a partir del androidx.core:core:1.1.0-dev01.

Por ejemplo:

Kotlin

var exclusionRects = listOf(rect1, rect2, rect3)

fun onLayout(
        changedCanvas: Boolean, left: Int, top: Int, right: Int, bottom: Int) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

fun onDraw(canvas: Canvas) {
  // Update rect bounds and the exclusionRects list
  setSystemGestureExclusionRects(exclusionRects)
}

Java

List<Rect> exclusionRects;

public void onLayout(
        boolean changedCanvas, int left, int top, int right, int bottom) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

public void onDraw(Canvas canvas) {
    // Update rect bounds and the exclusionRects list
    setSystemGestureExclusionRects(exclusionRects);
}

Conflictos con los gestos de inicio o de cambio rápido

Los nuevos gestos del sistema para ir a la pantalla principal y el interruptor rápido implican deslizar el dedo en la parte inferior de la pantalla, en el espacio que antes ocupaba la barra de navegación. Las apps no pueden inhabilitar estos gestos como sí pueden hacerlo con el gesto atrás.

Para mitigar este problema, Android 10 presenta la API de WindowInsets.getMandatorySystemGestureInsets(), que informa a las apps sobre los umbrales de reconocimiento táctil.

Juegos y otras apps que no tienen vistas

A menudo, los juegos y otras apps que no tienen una jerarquía de vistas requieren que el usuario deslice el dedo cerca de las áreas de gestos del sistema. En esos casos, los juegos pueden usar Window.setSystemGestureExclusionRects() para excluir las áreas que se superponen con las áreas reservadas para los gestos del sistema. Los juegos deben asegurarse de excluir estas áreas solo cuando sea necesario, por ejemplo, durante el juego.

Si un juego requiere que el usuario deslice el dedo cerca del área de gestos principal, la app puede solicitar que se use en modo envolvente. De esta manera, se inhabilitan los gestos del sistema mientras el usuario interactúa con el juego, pero se le permite deslizar el dedo desde la parte inferior de la pantalla para volver a habilitarlos.

Actualiza tu app para admitir el gesto atrás predictivo

Android 13 (nivel de API 33) introduce un gesto atrás predictivo para dispositivos Android, como teléfonos, pantallas grandes y dispositivos plegables. El gesto atrás predictivo es parte de una versión de varios años. Cuando se implementa por completo, esta función permite a los usuarios obtener una vista previa del destino o de otro resultado de un gesto atrás antes de completarlo por completo, lo que les permite decidir si continuar o permanecer en la vista actual.

Consulta Cómo agregar compatibilidad con el gesto atrás predictivo para obtener más detalles.

Recursos adicionales

Para obtener más información sobre la navegación por gestos, consulta lo siguiente:

Entradas de blog

Videos