Android Compose 应用进阶:Navigation 组件、共享元素与预测性返回的深度实践
Development of Shared element, Navigation, Predictive back component using Compose on Android
简述:
- 打开软件预测性返回选项后,使用Navigation组件组合页面间的跳转 即可实现页面的预测性返回
- 使用Navigation组件组合的页面,设置共享元素 即可实现共享元素间的预测性返回。
支持预测性返回手势
查看官方教程即可:
https://developer.android.com/guide/navigation/custom-back/predictive-back-gesture
Navigation导航 结合 Shared element共享元素
Navigation导航学习:
查看官方教程学习:
https://developer.android.com/develop/ui/compose/navigation?hl=zh-cn
导航主干-伪代码:- // 1. 定义导航路由
- sealed class PhotoScreenRouteForColumn(val route: String) {
- object Grid : PhotoScreenRouteForColumn("photo_grid") // 网格视图
- // 详情路由需要两个参数
- object Detail : PhotoScreenRouteForColumn("photo_detail/{outerIndex}/{innerIndex}") {
- fun createRoute(outerIndex: Int, innerIndex: Int) = "photo_detail/$outerIndex/$innerIndex"
- }
- }
- // 2.主屏幕 Composable
- @Composable
- fun RespondCollectScreenSimplified(
- collectId: Long,
- appNavController: NavController,
- // ... (其他状态初始化和数据获取逻辑)
- ) {
- // 创建内部导航控制器
- val photoNavController = rememberNavController()
- // 定义导航宿主
- NavHost(
- navController = photoNavController,
- startDestination = PhotoScreenRouteForColumn.Grid.route
- ) {
- // 路由 1: 网格视图
- composable(PhotoScreenRouteForColumn.Grid.route) {
- // 模拟点击照片后导航到详情
- val onPhotoClick = { outerIndex: Int, innerIndex: Int ->
- photoNavController.navigate(
- PhotoScreenRouteForColumn.Detail.createRoute(outerIndex, innerIndex)
- )
- }
- // 假设这里会显示一个照片列表,点击后触发 onPhotoClick
- println("显示照片网格视图")
- }
- // 路由 2: 详情视图
- composable(
- route = PhotoScreenRouteForColumn.Detail.route,
- arguments = listOf(
- navArgument("outerIndex") { type = NavType.IntType },
- navArgument("innerIndex") { type = NavType.IntType }
- )
- ) { navBackStackEntry ->
- // 获取导航参数
- val outerIndexArg = navBackStackEntry.arguments?.getInt("outerIndex")
- val innerIndexArg = navBackStackEntry.arguments?.getInt("innerIndex")
- // 假设这里会根据 outerIndexArg 和 innerIndexArg 显示照片详情
- println("显示照片详情,outerIndex: $outerIndexArg, innerIndex: $innerIndexArg")
- // 返回操作
- val onBackClick = {
- photoNavController.popBackStack()
- }
- // 假设有一个按钮点击后 调用 onBackClick,即可实现返回
- }
- }
- }
复制代码 <strong>提示
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |