导航原则

不同屏幕和应用之间的导航是用户体验的核心部分。以下原则为跨应用的一致且直观的用户体验设定了基准。导航组件旨在默认实现这些原则,确保用户在不同应用之间移动时可以应用相同的启发法和导航模式。

固定起始目的地

您构建的每个应用都有一个固定的起始目的地。这是用户从启动器启动您的应用时看到的第一个屏幕。此目的地也是用户按下返回按钮后返回启动器时看到的最后一个屏幕。让我们以 Sunflower 应用为例。

图 1. 列表屏幕是 Sunflower 应用的起始目的地。

从启动器启动 Sunflower 应用时,用户看到的第一个屏幕是列表屏幕,其中显示了他们花园中的植物列表。这也是他们在退出应用前看到的最后一个屏幕。如果他们从列表屏幕按下返回按钮,他们将导航回启动器。

当您的应用首次启动时,会为用户创建一个新任务,并且应用会显示其起始目的地。这成为了所谓的返回堆栈的基础目的地,也是您的应用导航状态的基础。堆栈的顶部是当前屏幕,堆栈中的先前目的地表示您去过的历史记录。返回堆栈的底部始终是应用的起始目的地。

更改返回堆栈的操作始终在堆栈顶部进行,通过将新目的地推到堆栈顶部或将最顶部的目的地从堆栈中弹出。导航到某个目的地会将该目的地推到堆栈顶部。

导航组件会为您管理所有返回堆栈的顺序,但您也可以选择自行管理返回堆栈。

在应用任务中,“向上”和“返回”行为相同

图 2. 向上和返回按钮

返回按钮显示在屏幕底部的系统导航栏中,用于按时间倒序导航用户最近使用过的屏幕历史记录。当您按下返回按钮时,当前目的地会从返回堆栈的顶部弹出,然后您会导航到上一个目的地。

向上按钮显示在屏幕顶部的应用栏中。在您的应用任务中,“向上”和“返回”按钮的行为相同。

向上按钮从不退出您的应用

如果用户位于应用的起始目的地,则“向上”按钮不会出现,因为“向上”按钮从不退出应用。而“返回”按钮则会显示并退出应用。

当您的应用通过另一个应用的任务中的深层链接启动时,“向上”会将用户带回您的应用任务并经过模拟返回堆栈,而不是带回触发深层链接的应用。“返回”按钮则会将您带回其他应用。

无论是深层链接还是手动导航到特定目的地,您都可以使用“向上”按钮在目的地之间导航回到起始目的地。

当深层链接到应用任务中的某个目的地时,您应用任务的任何现有返回堆栈都将被移除,并替换为深层链接的返回堆栈。

再次以 Sunflower 应用为例,假设用户之前从启动器屏幕启动了该应用,并导航到苹果的详细信息屏幕。查看“最近任务”屏幕会显示存在一个任务,其最顶部的屏幕是苹果的详细信息屏幕。

图 3. 用户在 Sunflower 应用中的导航及其生成的返回堆栈。

此时,用户可以轻触“主屏幕”按钮将应用置于后台。接下来,假设此应用具有深层链接功能,允许用户通过名称直接启动到特定的植物详细信息屏幕。通过此深层链接打开应用会完全替换图 3 中显示的当前 Sunflower 返回堆栈,并替换为新的返回堆栈,如图 4 所示。

图 4. 遵循深层链接会替换 Sunflower 应用的现有返回堆栈。

请注意,Sunflower 返回堆栈被一个合成返回堆栈替换,顶部是牛油果详细信息屏幕。作为起始目的地的我的花园屏幕也被添加到了返回堆栈中。原始的 Sunflower 返回堆栈消失了,包括应用之前用户在苹果详细信息屏幕上的知识。所有这些都很重要,因为合成返回堆栈必须是真实的。它应该与通过自然导航应用所能达到的返回堆栈相匹配。

为满足此需求,创建的合成返回堆栈是基于 NavGraph 的简化版本。对于没有嵌套的简单 NavGraph,它将包含起始目的地和深层链接目的地。对于更复杂的嵌套导航图,合成返回堆栈还将包含作为深层链接目的地祖先的任何嵌套图的起始目的地。

导航组件支持深层链接,并在链接到导航图中的任何目的地时为您重新创建真实的返回堆栈。