预测性返回和系统动画默认处于启用状态。如果您的应用 拦截了返回事件,并且您尚未迁移到预测性返回, 请更新您的应用以使用受支持的返回导航 API
启用默认系统动画
对于已迁移到受支持的返回处理 API 的应用,Android 15 及更高版本的设备上提供了“返回首页”“跨 activity”和“跨任务”系统动画。
- 返回首页:让用户返回到主屏幕。
- 跨 activity:在应用内的 activity 之间转换。
- 跨任务:在任务之间转换。
这些动画在 Android 15 及更高版本上默认处于启用状态。在搭载 Android 13 或 14 的设备上,用户可以通过 开发者选项启用这些动画。
如需获取系统动画,请将 AndroidX Activity 依赖项
更新到 1.6.0 或更高版本。
使用 Navigation Compose 启用预测性返回
如需在 Navigation Compose 中使用预测性返回,请确保您使用的是
navigation-compose 2.8.0
库或更高版本。
当用户向后滑动时,Navigation Compose 会自动在屏幕之间进行交叉淡入淡出:
导航时,您可以使用
popEnterTransition 和 popExitTransition 创建自定义过渡。当应用于 NavHost 时,这些修饰符可让您定义进入和退出屏幕的动画效果。您可以使用它们来创建各种效果,例如缩放、淡入淡出或滑动。
在此示例中,scaleOut 在 popExitTransition 中用于在用户向后导航时缩小退出屏幕。此外,transformOrigin 参数决定了缩放动画发生的中心点。默认情况下,该点是屏幕中心 (0.5f, 0.5f)。您可以调整此值,使缩放从一个不同的点开始。
NavHost( navController = navController, startDestination = Home, popExitTransition = { scaleOut( targetScale = 0.9f, transformOrigin = TransformOrigin(pivotFractionX = 0.5f, pivotFractionY = 0.5f) ) }, popEnterTransition = { EnterTransition.None }, modifier = modifier, )
此代码会产生以下结果:
popEnterTransition 和 popExitTransition 专门用于控制弹出返回堆栈时的动画,例如使用返回手势时。您还可以使用 enterTransition 和 exitTransition 来定义进入和退出可组合项的动画,而不仅仅是预测性返回。如果您仅设置了 enterTransition 和 exitTransition,它们将用于常规导航和弹出返回堆栈。不过,使用 popEnterTransition 和 popExitTransition 可让您为返回导航创建不同的动画。
与共享元素过渡集成
共享元素过渡在具有共享内容的可组合项之间提供平滑的视觉连接,通常用于导航。
如需将共享元素与 Navigation Compose 搭配使用,请参阅 使用共享元素的预测性返回。
使用 Material Compose 组件支持预测性返回
Material Compose 库中的许多组件都旨在与预测性返回手势无缝协作。如需在这些
组件中启用预测性返回动画,请在您的项目中添加最新的 Material3 依赖项(androidx.compose.material3:material3-*:1.3.0 或更高版本)。
支持预测性返回动画的 Material 组件包括:
SearchBarModalBottomSheetModalDrawerSheet/DismissibleDrawerSheetModalNavigationDrawer/DismissibleNavigationDrawer
SearchBar 和 ModalBottomSheet 会自动使用
预测性返回手势进行动画处理。ModalNavigationDrawer、
ModalDrawerSheet、DismissibleDrawerSheet 和
DismissibleNavigationDrawer 要求您将 drawerState 传递给
各自的表单内容可组合项。
测试预测性返回手势动画
如果您仍在使用 Android 13 或 Android 14,则可以测试“返回首页”动画。
如需测试此动画,请按以下步骤操作:
- 在您的设备上,依次转到设置 > 系统 > 开发者选项 。
- 选择预测性返回手势动画。
- 启动更新后的应用,然后执行返回手势,看看实际运行效果。
在 Android 15 及更高版本中,此功能默认处于启用状态。