预见式返回和系统动画默认处于启用状态。如果您的应用会拦截返回事件,但您尚未迁移到预测性返回,请更新应用以使用受支持的返回导航 API
启用默认系统动画
在 Android 15 及更高版本的设备上,如果应用已迁移到受支持的返回处理 API,则可以使用“返回主屏幕”、跨 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 组件包括:
SearchBar
ModalBottomSheet
ModalDrawerSheet/DismissibleDrawerSheet
ModalNavigationDrawer/DismissibleNavigationDrawer
SearchBar
和 ModalBottomSheet
会自动通过预测性返回手势添加动画效果。ModalNavigationDrawer
、ModalDrawerSheet
、DismissibleDrawerSheet
和 DismissibleNavigationDrawer
要求您将 drawerState
传递给各自的工作表内容可组合项。
测试预测性返回手势动画
如果您仍在使用 Android 13 或 Android 14,则可以测试返回主屏幕动画。
如需测试此动画,请按以下步骤操作:
- 在您的设备上,依次转到设置 > 系统 > 开发者选项。
- 选择预测性返回手势动画。
- 启动更新后的应用,然后执行返回手势,看看实际运行效果。
在 Android 15 及更高版本中,此功能默认处于启用状态。