| 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> |