在不同屏幕和应用之间导航是用户体验的核心部分。以下原则为跨应用的一致且直观的体验设定了基准。该导航组件旨在默认实现这些原则,确保用户在应用之间移动时可以应用相同的启发式方法和模式。
固定起始目的地
您构建的每个应用都具有一个固定的起始目的地。这是用户从启动器启动应用时看到的第一个屏幕。此目的地也是用户在按下“后退”按钮返回启动器时看到的最后一个屏幕。让我们以Sunflower 应用为例。
图 1. 列表屏幕是 Sunflower 应用的起始目的地。
从启动器启动 Sunflower 应用时,用户看到的第一个屏幕是**列表屏幕**,即其花园中植物的列表。这也是他们在退出应用之前看到的最后一个屏幕。如果他们从列表屏幕按下“后退”按钮,他们将导航回启动器。
导航状态表示为目的地的堆栈
当您的应用首次启动时,会为用户创建一个新任务,应用会显示其起始目的地。这成为称为后退堆栈的基础目的地,也是应用导航状态的基础。堆栈的顶部是当前屏幕,堆栈中之前的目的地表示您访问过的历史记录。后退堆栈始终在堆栈底部具有应用的起始目的地。
更改后退堆栈的操作始终在堆栈顶部进行操作,或者通过将新目的地推送到堆栈顶部,或者通过从堆栈顶部弹出最顶层的目的地。导航到目的地会将该目的地推送到堆栈顶部。
该导航组件为您管理所有后退堆栈排序,尽管您也可以选择自己管理后退堆栈。
向上和后退在应用的任务内相同
图 2. 向上和后退按钮
后退按钮出现在屏幕底部的系统导航栏中,用于按反时间顺序导航用户最近使用过的屏幕历史记录。当您按下“后退”按钮时,当前目的地将从后退堆栈的顶部弹出,然后您将导航到之前的目的地。
向上按钮出现在屏幕顶部的应用栏中。在应用的任务内,向上和后退按钮的行为相同。
向上按钮永远不会退出应用
如果用户位于应用的起始目的地,则向上按钮不会出现,因为向上按钮永远不会退出应用。但是,后退按钮会显示并退出应用。
当您的应用使用其他应用的任务上的深层链接启动时,向上会将用户转换回应用的任务并通过模拟的后退堆栈,而不是转换回触发深层链接的应用。但是,后退按钮会将您带回其他应用。
深层链接模拟手动导航
无论深层链接还是手动导航到特定目的地,您都可以使用向上按钮在目的地之间导航,返回到起始目的地。
当深层链接到应用任务内的目的地时,应用任务的任何现有后退堆栈都将被移除并替换为深层链接的后退堆栈。
再次以Sunflower应用为例,假设用户之前已从启动器屏幕启动应用并导航到苹果的详细信息屏幕。查看最近使用的应用屏幕将表明存在一个任务,其中最顶层的屏幕是苹果的详细信息屏幕。
图 3. 用户在Sunflower应用中导航以及生成的返回栈。
此时,用户可以点击Home按钮将应用置于后台。接下来,假设此应用具有深度链接功能,允许用户通过名称直接启动到特定植物的详细信息屏幕。通过此深度链接打开应用会完全替换图 3 中显示的当前Sunflower返回栈,并使用新的返回栈,如图 4 所示。
图 4. 遵循深度链接会替换Sunflower应用的现有返回栈。
请注意,Sunflower返回栈被一个合成返回栈替换,其中鳄梨详细信息屏幕位于顶部。我的花园屏幕(即起始目的地)也已添加到返回栈中。原始的Sunflower返回栈消失了,包括应用对用户之前位于苹果详细信息屏幕的了解。所有这些都很重要,因为合成返回栈必须是真实的。它应该与通过在应用中自然导航可以实现的返回栈相匹配。
为了满足此需求,创建的合成返回栈是一个基于NavGraph
的简化版本。对于没有嵌套的简单NavGraph
,它将包含起始目的地和深度链接目的地。对于更复杂的嵌套导航图,合成返回栈还将包含作为深度链接目的地祖先的任何嵌套图的起始目的地。
导航组件支持深度链接,并在链接到导航图中的任何目的地时为您重新创建真实的返回栈。