91b5ecc486
Change-Id: I34d85096eecb4e83f52e481411cf2f590d553a37
110 lines
6.5 KiB
Plaintext
110 lines
6.5 KiB
Plaintext
page.title=Providing Ancestral and Temporal Navigation
|
|
parent.title=Designing Effective Navigation
|
|
parent.link=index.html
|
|
|
|
trainingnavtop=true
|
|
previous.title=Providing Descendant and Lateral Navigation
|
|
previous.link=descendant-lateral.html
|
|
next.title=Putting it All Together: Wireframing…
|
|
next.link=wireframing.html
|
|
|
|
@jd:body
|
|
|
|
<div id="tb-wrapper">
|
|
<div id="tb">
|
|
|
|
<h2>This lesson teaches you to:</h2>
|
|
<ol>
|
|
<li><a href="#temporal-navigation">Support Temporal Navigation: <em>Back</em></a></li>
|
|
<li><a href="#ancestral-navigation">Provide Ancestral Navigation: <em>Up</em> and <em>Home</em></a></li>
|
|
</ol>
|
|
|
|
<h2>You should also read</h2>
|
|
<ul>
|
|
<li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
|
|
<li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<p>Now that users can navigate <a href="descendant-lateral.html">deep into</a> the application's
|
|
screen hierarchy, we need to provide a method for navigating up the hierarchy, to parent and
|
|
ancestor screens. Additionally, we should ensure that temporal navigation via the <em>Back</em>
|
|
button is respected to respect Android conventions.</p>
|
|
|
|
<div class="note design">
|
|
<p><strong>Back/Up Navigation Design</strong></p>
|
|
<p>For design guidelines, read Android Design's <a
|
|
href="{@docRoot}design/patterns/navigation.html">Navigation</a> pattern guide.</p>
|
|
</div>
|
|
|
|
<h2 id="temporal-navigation">Support Temporal Navigation: <em>Back</em></h2>
|
|
|
|
<p>Temporal navigation, or navigation between historical screens, is deeply rooted in the Android
|
|
system. All Android users expect the <em>Back</em> button to take them to the previous screen,
|
|
regardless of other state. The set of historical screens is always rooted at the user's Launcher
|
|
application (the phone's "home" screen). That is, pressing <em>Back</em> enough times should land
|
|
you back at the Launcher, after which the <em>Back</em> button will do nothing.</p>
|
|
|
|
|
|
<img src="{@docRoot}images/training/app-navigation-ancestral-navigate-back.png"
|
|
alt="The Back button behavior after entering the Email app from the People (or Contacts) app"
|
|
id="figure-navigate-back">
|
|
|
|
<p class="img-caption"><strong>Figure 1.</strong> The <em>Back</em> button behavior after entering
|
|
the Email app from the People (or Contacts) app.</p>
|
|
|
|
|
|
<p>Applications generally don't have to worry about managing the <em>Back</em> button themselves;
|
|
the system handles <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tasks and
|
|
the <em>back stack</em></a>, or the list of previous screens, automatically. The <em>Back</em>
|
|
button by default simply traverses this list of screens, removing the current screen from the list
|
|
upon being pressed.</p>
|
|
|
|
<p>There are, however, cases where you may want to override the behavior for <em>Back</em>. For
|
|
example, if your screen contains an embedded web browser where users can interact with page elements
|
|
to navigate between web pages, you may wish to trigger the embedded browser's default <em>back</em>
|
|
behavior when users press the device's <em>Back</em> button. Upon reaching the beginning of the
|
|
browser's internal history, you should always defer to the system's default behavior for the
|
|
<em>Back</em> button.</p>
|
|
|
|
|
|
<h2 id="ancestral-navigation">Provide Ancestral Navigation: <em>Up</em> and <em>Home</em></h2>
|
|
|
|
<p>Before Android 3.0, the most common form of ancestral navigation was the <em>Home</em> metaphor.
|
|
This was generally implemented as a <em>Home</em> item accessible via the device's <em>Menu</em>
|
|
button, or a <em>Home</em> button at the top-left of the screen, usually as a component of the
|
|
Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design).
|
|
Upon selecting <em>Home</em>, the user would be taken to the screen at the top of the screen
|
|
hierarchy, generally known as the application's home screen.</p>
|
|
|
|
<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>
|
|
|
|
<p>Android 3.0 introduced the <em>Up</em> metaphor, which is presented in the Action Bar as a
|
|
substitute for the <em>Home</em> button described above. Upon tapping <em>Up</em>, the user should
|
|
be taken to the parent screen in the hierarchy. This navigation step is usually the previous screen
|
|
(as described with the <em>Back</em> button discussion above), but this is not universally the case.
|
|
Thus, developers must ensure that <em>Up</em> for each screen navigates to a single, predetermined
|
|
parent screen.</p>
|
|
|
|
|
|
<img src="{@docRoot}images/training/app-navigation-ancestral-navigate-up.png"
|
|
alt="Example behavior for UP navigation after entering the Email app from the People app" id="figure-navigate-up">
|
|
|
|
<p class="img-caption"><strong>Figure 2.</strong> Example behavior for up navigation after entering the Email app from the People app.</p>
|
|
|
|
|
|
<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>
|
|
|
|
<p class="note"><strong>Implementation Note:</strong> As a best practice, when implementing either
|
|
<em>Home</em> or <em>Up</em>, make sure to clear the back stack of any descendent screens. For
|
|
<em>Home</em>, the only remaining screen on the back stack should be the home screen. For
|
|
<em>Up</em> navigation, the current screen should be removed from the back stack, unless
|
|
<em>Back</em> navigates across screen hierarchies. You can use the {@link
|
|
android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP} and {@link
|
|
android.content.Intent#FLAG_ACTIVITY_NEW_TASK} intent flags together to achieve this.</p>
|
|
|
|
<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>
|