blob: 68a08781cdfc469b5b65e1f8ae5ce2cfa9b67a2c [file] [log] [blame]
Roman Nurika3030652011-11-23 17:00:58 -08001page.title=Providing Ancestral and Temporal Navigation
Scott Main580f0142011-12-15 16:47:26 -08002parent.title=Designing Effective Navigation
Roman Nurika3030652011-11-23 17:00:58 -08003parent.link=index.html
4
5trainingnavtop=true
6previous.title=Providing Descendant and Lateral Navigation
7previous.link=descendant-lateral.html
8next.title=Putting it All Together: Wireframing…
9next.link=wireframing.html
10
11@jd:body
12
13<div id="tb-wrapper">
14<div id="tb">
15
16<h2>This lesson teaches you to:</h2>
17<ol>
18 <li><a href="#temporal-navigation">Support Temporal Navigation: <em>Back</em></a></li>
19 <li><a href="#ancestral-navigation">Provide Ancestral Navigation: <em>Up</em> and <em>Home</em></a></li>
20</ol>
21
22<h2>You should also read</h2>
23<ul>
Roman Nurik3ba792c2012-01-26 11:56:31 -080024 <li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
Scott Main50e990c2012-06-21 17:14:39 -070025 <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
Roman Nurika3030652011-11-23 17:00:58 -080026</ul>
27
28</div>
29</div>
30
31
Scott Maincf9fe432012-01-31 19:14:35 -080032<p>Now that users can navigate <a href="descendant-lateral.html">deep into</a> the application's
33screen hierarchy, we need to provide a method for navigating up the hierarchy, to parent and
34ancestor screens. Additionally, we should ensure that temporal navigation via the <em>Back</em>
35button is respected to respect Android conventions.</p>
Roman Nurika3030652011-11-23 17:00:58 -080036
Scott Main91b5ecc2012-06-22 13:26:08 -070037<div class="note design">
Roman Nurik3ba792c2012-01-26 11:56:31 -080038<p><strong>Back/Up Navigation Design</strong></p>
39 <p>For design guidelines, read Android Design's <a
40 href="{@docRoot}design/patterns/navigation.html">Navigation</a> pattern guide.</p>
41</div>
Roman Nurika3030652011-11-23 17:00:58 -080042
43<h2 id="temporal-navigation">Support Temporal Navigation: <em>Back</em></h2>
44
Scott Maincf9fe432012-01-31 19:14:35 -080045<p>Temporal navigation, or navigation between historical screens, is deeply rooted in the Android
46system. All Android users expect the <em>Back</em> button to take them to the previous screen,
47regardless of other state. The set of historical screens is always rooted at the user's Launcher
48application (the phone's "home" screen). That is, pressing <em>Back</em> enough times should land
49you back at the Launcher, after which the <em>Back</em> button will do nothing.</p>
Roman Nurika3030652011-11-23 17:00:58 -080050
51
52<img src="{@docRoot}images/training/app-navigation-ancestral-navigate-back.png"
Scott Maincf9fe432012-01-31 19:14:35 -080053 alt="The Back button behavior after entering the Email app from the People (or Contacts) app"
54id="figure-navigate-back">
Roman Nurika3030652011-11-23 17:00:58 -080055
Scott Maincf9fe432012-01-31 19:14:35 -080056<p class="img-caption"><strong>Figure 1.</strong> The <em>Back</em> button behavior after entering
57the Email app from the People (or Contacts) app.</p>
Roman Nurika3030652011-11-23 17:00:58 -080058
59
Scott Maincf9fe432012-01-31 19:14:35 -080060<p>Applications generally don't have to worry about managing the <em>Back</em> button themselves;
Scott Main50e990c2012-06-21 17:14:39 -070061the system handles <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tasks and
Scott Maincf9fe432012-01-31 19:14:35 -080062the <em>back stack</em></a>, or the list of previous screens, automatically. The <em>Back</em>
63button by default simply traverses this list of screens, removing the current screen from the list
64upon being pressed.</p>
Roman Nurika3030652011-11-23 17:00:58 -080065
Scott Maincf9fe432012-01-31 19:14:35 -080066<p>There are, however, cases where you may want to override the behavior for <em>Back</em>. For
67example, if your screen contains an embedded web browser where users can interact with page elements
68to navigate between web pages, you may wish to trigger the embedded browser's default <em>back</em>
69behavior when users press the device's <em>Back</em> button. Upon reaching the beginning of the
70browser's internal history, you should always defer to the system's default behavior for the
71<em>Back</em> button.</p>
Roman Nurika3030652011-11-23 17:00:58 -080072
73
74<h2 id="ancestral-navigation">Provide Ancestral Navigation: <em>Up</em> and <em>Home</em></h2>
75
Scott Maincf9fe432012-01-31 19:14:35 -080076<p>Before Android 3.0, the most common form of ancestral navigation was the <em>Home</em> metaphor.
77This was generally implemented as a <em>Home</em> item accessible via the device's <em>Menu</em>
78button, or a <em>Home</em> button at the top-left of the screen, usually as a component of the
79Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design).
80Upon selecting <em>Home</em>, the user would be taken to the screen at the top of the screen
81hierarchy, generally known as the application's home screen.</p>
Roman Nurika3030652011-11-23 17:00:58 -080082
83<p>Providing direct access to the application's home screen can give the user a sense of comfort and security. Regardless of where they are in the application, if they get lost in the app, they can select <em>Home</em> to arrive back at the familiar home screen.</p>
84
Scott Maincf9fe432012-01-31 19:14:35 -080085<p>Android 3.0 introduced the <em>Up</em> metaphor, which is presented in the Action Bar as a
86substitute for the <em>Home</em> button described above. Upon tapping <em>Up</em>, the user should
87be taken to the parent screen in the hierarchy. This navigation step is usually the previous screen
88(as described with the <em>Back</em> button discussion above), but this is not universally the case.
89Thus, developers must ensure that <em>Up</em> for each screen navigates to a single, predetermined
90parent screen.</p>
Roman Nurika3030652011-11-23 17:00:58 -080091
92
93<img src="{@docRoot}images/training/app-navigation-ancestral-navigate-up.png"
94 alt="Example behavior for UP navigation after entering the Email app from the People app" id="figure-navigate-up">
95
96<p class="img-caption"><strong>Figure 2.</strong> Example behavior for up navigation after entering the Email app from the People app.</p>
97
98
99<p>In some cases, it's appropriate for <em>Up</em> to perform an action rather than navigating to a parent screen. Take for example, the Gmail application for Android 3.0-based tablets. When viewing a mail conversation while holding the device in landscape, the conversation list, as well as the conversation details are presented side-by-side. This is a form of parent-child screen grouping, as discussed in a <a href="multiple-sizes.html">previous lesson</a>. However, when viewing a mail conversation in the portrait orientation, only the conversation details are shown. The <em>Up</em> button is used to temporarily show the parent pane, which slides in from the left of the screen. Pressing the <em>Up</em> button again while the left pane is visible exits the context of the individual conversation, up to a full-screen list of conversations.</p>
100
Scott Maincf9fe432012-01-31 19:14:35 -0800101<p class="note"><strong>Implementation Note:</strong> As a best practice, when implementing either
102<em>Home</em> or <em>Up</em>, make sure to clear the back stack of any descendent screens. For
103<em>Home</em>, the only remaining screen on the back stack should be the home screen. For
104<em>Up</em> navigation, the current screen should be removed from the back stack, unless
105<em>Back</em> navigates across screen hierarchies. You can use the {@link
106android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP} and {@link
107android.content.Intent#FLAG_ACTIVITY_NEW_TASK} intent flags together to achieve this.</p>
Roman Nurika3030652011-11-23 17:00:58 -0800108
Roman Nurik00697a92011-12-16 11:48:24 -0800109<p>In the last lesson, we apply the concepts discussed in all of the lessons so far to create interaction design wireframes for our example news application.</p>