
Android 13 introducirá un gesto de retroceso predictivo para dispositivos Android, como teléfonos, pantallas grandes y dispositivos plegables. Cuando esta función se implemente por completo, permitirá que los usuarios obtengan una vista previa del destino o algún otro resultado de un gesto de retroceso antes de completarlo en su totalidad, lo que les permitirá decidir si desean continuar o permanecer en la vista actual.
Por ejemplo, con un gesto de retroceso, puedes mostrar una vista previa animada de la pantalla principal detrás de tu app, como se muestra en simulación de la Figura 1. A partir de la versión final de Android 13, deberías poder probar esta animación para volver a la pantalla principal mediante la habilitación de una opción para desarrolladores (como se describe en esta página).
Para admitir el gesto de retroceso predictivo, se requiere actualizar la app, mediante OnBackPressedCallback
AppCompat 1.6.0-alpha03 (AndroidX) o una API posterior, o bien mediante la nueva API de plataforma OnBackInvokedCallback
.
Esta actualización proporciona una ruta de migración para las APIs de navegación hacia atrás que ya no se admiten: KeyEvent.KEYCODE_BACK
y cualquier clase con métodos onBackPressed
, por ejemplo, Activity
y Dialog
.
Codelab
Además de usar la documentación en esta página, puedes probar nuestro codelab, que proporciona una implementación de casos de uso común de un WebView que controla el gesto de retroceso predictivo mediante AndroidX Activity APIs
.
Actualiza una app que usa la navegación hacia atrás predeterminada
Actualizar tu app para que sea compatible con esta función es sencillo si esta no implementa ningún comportamiento de navegación hacia atrás personalizada (es decir, permite que el sistema continúe controlando este tipo de navegación). Simplemente, habilita esta función, como se describe en esta página.
Actualiza una app que usa una navegación hacia atrás personalizada
Si tu app implementa un comportamiento de navegación hacia atrás personalizada, existen diferentes rutas de migración, en función de si usa AndroidX y cómo controla este tipo de navegación.
Tu app usa AndroidX | Cómo tu app controla la navegación hacia atrás | Ruta de migración recomendada (vínculo en esta página) |
Sí | API de AndroidX | Migra una implementación actual de AndroidX |
APIs de plataforma no compatibles | Migra una app de AndroidX que contiene APIs de navegación hacia atrás no compatibles a las APIs de AndroidX | |
No | APIs de plataforma no compatibles, que se pueden migrar | Migra una app que usa APIs de navegación hacia atrás no compatibles a las APIs de la plataforma |
APIs de plataforma no compatibles, pero que no se pueden migrar | No habilitesla función hasta que esta se convierta en obligatoria |
Migra una implementación de navegación hacia atrás de AndroidX
Este caso de uso es el más común (y el más recomendado). Se aplica a apps nuevas o existentes que implementan el manejo de navegación por gestos personalizada con OnBackPressedDispatcher
, como se describe en Cómo brindar navegación personalizada hacia atrás.
Si tu app se incluyen en esta categoría, puedes brindar compatibilidad con el gesto de retroceso predictivo si solo habilitas este gesto, como se describe en esta página.
Migra una app de AndroidX que contiene APIs de navegación hacia atrás no compatibles a las APIs de AndroidX
Si tu app usa bibliotecas de AndroidX, pero implementa APIs de navegación hacia atrás no compatibles o hace referencia a estas, deberás migrar al uso de las APIs de AndroidX para admitir el nuevo comportamiento.
Para migrar APIs no compatibles a las APIs de AndroidX, haz lo siguiente:
Migra la lógica del control de navegación hacia atrás del sistema a
OnBackPressedDispatcher
de AndroidX con una implementación deOnBackPressedCallback
. Para obtener ayuda detallada, consulta Cómo proporcionar navegación personalizada hacia atrás.Para dejar de interceptar la navegación hacia atrás del sistema, inhabilita las instancias de
OnBackPressedCallback
que se habilitaron previamente o no habilites ninguna devolución de llamada en ningún momento.Una vez que hayas migrado tu app de forma correcta, habilita el gesto de retroceso predictivo, como se describe en esta página.
Migra una app que usa APIs de navegación hacia atrás no compatibles a las APIs de la plataforma
Si tu app no puede usar bibliotecas de AndroidX y, en su lugar, implementa la navegación hacia atrás personalizada o hace referencia a esta mediante las API no compatibles, debes migrar a la API de la plataforma OnBackInvokedCallback
.
Sigue estos pasos para migrar APIs no compatibles a la API de la plataforma:
Usa la nueva API de
OnBackInvokedCallback
en dispositivos que ejecutan Android 13 o versiones posteriores y depende las APIs no compatibles en dispositivos que ejecutan Android 12 o versiones anteriores.Registra la lógica de navegación hacia atrás personalizada en
OnBackInvokedCallback
con la lógica en el métodoonBackInvoked
. De esta manera, se evita que se complete la actividad actual, y tu devolución de llamada tendrá la oportunidad de reaccionar a la acción de retroceso una vez que el usuario complete la navegación hacia atrás del sistema.Para garantizar que las mejoras futuras de la navegación hacia atrás del sistema sean compatibles, la app DEBE cancelar el registro de
OnBackInvokedCallback
. De lo contrario, los usuarios podrían ver un comportamiento no deseado cuando usen la navegación hacia atrás del sistema, por ejemplo, podrían "atascarse" entre vistas y obligarlas a forzar el cierre de tu app.Este es un ejemplo de cómo migrar la lógica fuera de
onBackPressed
:Kotlin
@Override fun onCreate() { if (BuildCompat.isAtLeastT()) { onBackInvokedDispatcher.registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT ) { /** * onBackPressed logic goes here. For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } } }
Java
@Override void onCreate() { if (BuildCompat.isAtLeastT()) { getOnBackInvokedDispatcher().registerOnBackInvokedCallback( OnBackInvokedDispatcher.PRIORITY_DEFAULT, () -> { /** * onBackPressed logic goes here - For instance: * Prevents closing the app to go home screen when in the * middle of entering data to a form * or from accidentally leaving a fragment with a WebView in it * * Unregistering the callback to stop intercepting the back gesture: * When the user transitions to the topmost screen (activity, fragment) * in the BackStack, unregister the callback by using * OnBackInvokeDispatcher.unregisterOnBackInvokedCallback * (https://developer.android.com/reference/kotlin/android/view/OnBackInvokedDispatcher#unregisteronbackinvokedcallback) */ } ); } }
Una vez que hayas migrado tu app de forma correcta, habilita el gesto de retroceso predictivo, como se describe en la siguiente sección.
Habilita el gesto de retroceso predictivo
Una vez que hayas determinado cómo actualizar tu app según el caso, es sencillo habilitar la compatibilidad con el gesto de retroceso predictivo.
Para habilitarlo, en AndroidManifest.xml
, en la etiqueta <application>
, establece la marca android:enableOnBackInvokedCallback
en true
.
<application
...
android:enableOnBackInvokedCallback="true"
... >
...
</application>
Si no proporcionas un valor, el predeterminado es false
, y se inhabilita el gesto de retroceso predictivo.
Prueba la animación del gesto de retroceso predictivo
A partir de la versión final de Android 13, deberías poder habilitar una opción para desarrolladores a fin de probar la animación para volver a la pantalla principal que se muestra en la Figura 1.
Para probar esta animación, sigue estos pasos:
En tu dispositivo, ve a Configuración > Sistema > Opciones para desarrolladores.
Selecciona Animaciones de retroceso predictivas.
Inicia la app actualizada y usa el gesto de retroceso para verlo en acción.