Navigation 3 是一款旨在与 Compose 搭配使用的新导航库。借助 Navigation 3,您可以完全控制返回堆栈,并且可以像在列表中添加和移除项一样轻松地在目的地之间进行导航。它通过提供以下功能来创建灵活的应用导航系统:
- 用于对返回堆栈进行建模的惯例,其中返回堆栈上的每个条目都表示用户已前往的内容
- 一种可随返回堆栈变化(包括动画)自动更新的界面
- 用于返回堆栈中项的范围,允许在项位于返回堆栈中时保留状态
- 一种自适应布局系统,可同时显示多个目的地,并允许在这些布局之间无缝切换
- 一种用于让内容与其父布局(元数据)进行通信的机制
概括来讲,您可以通过以下方式实现 Navigation 3:
- 定义用户可在应用中导航到的内容(每个内容都有一个唯一的键),并添加一个将该键解析为内容的功能。请参阅将密钥解析为内容。
- 创建一个键被推送到其中并在用户浏览应用时从中移除的返回堆栈。请参阅创建返回堆栈。
- 使用
NavDisplay显示应用的返回堆栈。每当返回堆栈发生变化时,它都会更新界面以显示相关内容。请参阅显示返回堆栈。 - 根据需要修改
NavDisplay的场景策略,以支持自适应布局和不同平台。
您可以在 AOSP 上查看 Navigation 3 的完整源代码。
对 Jetpack Navigation 的改进
Navigation 3 通过以下方式改进了原始 Jetpack Navigation API:
- 提供更简单的 Compose 集成
- 让您可以完全控制返回堆栈
- 使布局能够同时从返回堆栈中读取多个目的地,从而适应窗口大小的变化和其他输入。
如需详细了解 Navigation 3 的原则和 API 设计选择,请参阅这篇博文。
代码示例
recipes 代码库包含一些示例,展示了如何使用 Navigation 3 构建块来解决常见的导航难题。