blob: 08828e8be336e5dadf05f600139a1d2a9696f2e0 [file] [log] [blame]
Roman Nurikb99ae732012-03-06 12:26:15 -08001page.title=Navigation with Back and Up
Joe Fernandez33baa5a2013-11-14 11:41:19 -08002page.tags=navigation,activity,task,up navigation,back navigation
Roman Nurikb99ae732012-03-06 12:26:15 -08003@jd:body
4
Scott Maincbcd17d2013-05-14 08:46:55 -07005<a class="notice-developers" href="{@docRoot}training/implementing-navigation/index.html">
6 <div>
7 <h3>Developer Docs</h3>
8 <p>Implementing Effective Navigation</p>
9 </div>
10</a>
11
Roman Nurikb99ae732012-03-06 12:26:15 -080012<p>Consistent navigation is an essential component of the overall user experience. Few things frustrate
13users more than basic navigation that behaves in inconsistent and unexpected ways. Android 3.0
14introduced significant changes to the global navigation behavior. Thoughtfully following the
15guidelines for Back and Up will make your app's navigation predictable and reliable for your users.</p>
16<p>Android 2.3 and earlier relied upon the system <em>Back</em> button for supporting navigation within an
17app. With the introduction of action bars in Android 3.0, a second navigation mechanism appeared:
18the <em>Up</em> button, consisting of the app icon and a left-point caret.</p>
19
20<img src="{@docRoot}design/media/navigation_with_back_and_up.png">
21
22<h2 id="up-vs-back">Up vs. Back</h2>
23
Roman Nurikb20f1202012-03-29 13:28:13 -070024<p>The Up button is used to navigate within an app based on the hierarchical relationships
Roman Nurikb99ae732012-03-06 12:26:15 -080025between screens. For instance, if screen A displays a list of items, and selecting an item leads to
26screen B (which presents that item in more detail), then screen B should offer an Up button that
27returns to screen A.</p>
Roman Nurikb20f1202012-03-29 13:28:13 -070028<p>If a screen is the topmost one in an app (that is, the app's home), it should not present an Up
Roman Nurikb99ae732012-03-06 12:26:15 -080029button.</p>
Roman Nurikb20f1202012-03-29 13:28:13 -070030
31<p>The system Back button is used to navigate, in reverse chronological order, through the history
32of screens the user has recently worked with. It is generally based on the temporal relationships
33between screens, rather than the app's hierarchy.</p>
34
Roman Nurikb99ae732012-03-06 12:26:15 -080035<p>When the previously viewed screen is also the hierarchical parent of the current screen, pressing
Roman Nurikb20f1202012-03-29 13:28:13 -070036the Back button has the same result as pressing an Up button&mdash;this is a common
37occurrence. However, unlike the Up button, which ensures the user remains within your app, the Back
38button can return the user to the Home screen, or even to a different app.</p>
Roman Nurikb99ae732012-03-06 12:26:15 -080039
40<img src="{@docRoot}design/media/navigation_up_vs_back_gmail.png">
41
Roman Nurikb20f1202012-03-29 13:28:13 -070042<p>The Back button also supports a few behaviors not directly tied to screen-to-screen navigation:
43</p>
Roman Nurikb99ae732012-03-06 12:26:15 -080044<ul>
Roman Nurikb20f1202012-03-29 13:28:13 -070045<li>Dismisses floating windows (dialogs, popups)</li>
46<li>Dismisses contextual action bars, and removes the highlight from the selected items</li>
47<li>Hides the onscreen keyboard (IME)</li>
Roman Nurikb99ae732012-03-06 12:26:15 -080048</ul>
49<h2 id="within-app">Navigation Within Your App</h2>
50
51<h4>Navigating to screens with multiple entry points</h4>
52<p>Sometimes a screen doesn't have a strict position within the app's hierarchy, and can be reached
Roman Nurikb20f1202012-03-29 13:28:13 -070053from multiple entry points&mdash;such as a settings screen that can be reached from any other screen
Roman Nurikb99ae732012-03-06 12:26:15 -080054in your app. In this case, the Up button should choose to return to the referring screen, behaving
55identically to Back.</p>
56<h4>Changing view within a screen</h4>
57<p>Changing view options for a screen does not change the behavior of Up or Back: the screen is still
58in the same place within the app's hierarchy, and no new navigation history is created.</p>
59<p>Examples of such view changes are:</p>
60<ul>
61<li>Switching views using tabs and/or left-and-right swipes</li>
62<li>Switching views using a dropdown (aka collapsed tabs)</li>
63<li>Filtering a list</li>
64<li>Sorting a list</li>
Roman Nurikb20f1202012-03-29 13:28:13 -070065<li>Changing display characteristics (such as zooming)</li>
Roman Nurikb99ae732012-03-06 12:26:15 -080066</ul>
67<h4>Navigating between sibling screens</h4>
68<p>When your app supports navigation from a list of items to a detail view of one of those items, it's
69often desirable to support direction navigation from that item to another one which precedes or
70follows it in the list. For example, in Gmail, it's easy to swipe left or right from a conversation
71to view a newer or older one in the same Inbox. Just as when changing view within a screen, such
72navigation does not change the behavior of Up or Back.</p>
73
74<img src="{@docRoot}design/media/navigation_between_siblings_gmail.png">
75
Roman Nurikb20f1202012-03-29 13:28:13 -070076<p>However, a notable exception to this occurs when browsing between related detail views not tied
77together by the referring list&mdash;for example, when browsing in the Play Store between apps from
Roman Nurikb99ae732012-03-06 12:26:15 -080078the same developer, or albums by the same artist. In these cases, following each link does create
Roman Nurikb20f1202012-03-29 13:28:13 -070079history, causing the Back button to step through each previously viewed screen. Up should continue
80to bypass these related screens and navigate to the most recently viewed container screen.</p>
Roman Nurikb99ae732012-03-06 12:26:15 -080081
82<img src="{@docRoot}design/media/navigation_between_siblings_market1.png">
83
84<p>You have the ability to make the Up behavior even smarter based on your knowledge of detail
Roman Nurikb20f1202012-03-29 13:28:13 -070085view. Extending the Play Store example from above, imagine the user has navigated from the last
86Book viewed to the details for the Movie adaptation. In that case, Up can return to a container
87(Movies) which the user hasn't previously navigated through.</p>
Roman Nurikb99ae732012-03-06 12:26:15 -080088
89<img src="{@docRoot}design/media/navigation_between_siblings_market2.png">
90
Roman Nurikb20f1202012-03-29 13:28:13 -070091<h2 id="into-your-app">Navigation into Your App via Home Screen Widgets and Notifications</h2>
Roman Nurikb99ae732012-03-06 12:26:15 -080092
Roman Nurikb20f1202012-03-29 13:28:13 -070093<p>You can use Home screen widgets or notifications to help your users navigate directly to screens
94deep within your app's hierarchy. For example, Gmail's Inbox widget and new message notification can
95both bypass the Inbox screen, taking the user directly to a conversation view.</p>
96
97<p>For both of these cases, handle the Up button as follows:</p>
98
Roman Nurikb99ae732012-03-06 12:26:15 -080099<ul>
Roman Nurikb20f1202012-03-29 13:28:13 -0700100<li><em>If the destination screen is typically reached from one particular screen within your
101app</em>, Up should navigate to that screen.</li>
102<li><em>Otherwise</em>, Up should navigate to the topmost ("Home") screen of your app.</li>
Roman Nurikb99ae732012-03-06 12:26:15 -0800103</ul>
Roman Nurikb99ae732012-03-06 12:26:15 -0800104
Roman Nurikb20f1202012-03-29 13:28:13 -0700105<p>In the case of the Back button, you should make navigation more predictable by inserting into the
106task's back stack the complete upward navigation path to the app's topmost screen. This allows users
107who've forgotten how they entered your app to navigate to the app's topmost screen before
108exiting.</p>
Roman Nurikb99ae732012-03-06 12:26:15 -0800109
Roman Nurikb20f1202012-03-29 13:28:13 -0700110<p>As an example, Gmail's Home screen widget has a button for diving directly to its compose
111screen. Up or Back from the compose screen would take the user to the Inbox, and from there the
112Back button continues to Home.</p>
Roman Nurikb99ae732012-03-06 12:26:15 -0800113
114<img src="{@docRoot}design/media/navigation_from_outside_back.png">
Roman Nurikb20f1202012-03-29 13:28:13 -0700115
116<h4>Indirect notifications</h4>
117
118<p>When your app needs to present information about multiple events simultaneously, it can use a
119single notification that directs the user to an interstitial screen. This screen summarizes these
120events, and provides paths for the user to dive deeply into the app. Notifications of this style are
121called <em>indirect notifications</em>.</p>
122
123<p>Unlike standard (direct) notifications, pressing Back from an indirect notification's
124interstitial screen returns the user to the point the notification was triggered from&mdash;no
125additional screens are inserted into the back stack. Once the user proceeds into the app from its
126interstitial screen, Up and Back behave as for standard notifications, as described above:
127navigating within the app rather than returning to the interstitial.</p>
128
129<p>For example, suppose a user in Gmail receives an indirect notification from Calendar. Touching
130this notification opens the interstitial screen, which displays reminders for several different
131events. Touching Back from the interstitial returns the user to Gmail. Touching on a particular
132event takes the user away from the interstitial and into the full Calendar app to display details of
133the event. From the event details, Up and Back navigate to the top-level view of Calendar.</p>
134
135<img src="{@docRoot}design/media/navigation_indirect_notification.png">
136
137<h4>Pop-up notifications</h4>
138
139<p><em>Pop-up notifications</em> bypass the notification drawer, instead appearing directly in
140front of the user. They are rarely used, and <strong>should be reserved for occasions where a timely
141response is required and the interruption of the user's context is necessary</strong>. For example,
142Talk uses this style to alert the user of an invitation from a friend to join a video chat, as this
143invitation will automatically expire after a few seconds.</p>
144
145<p>In terms of navigation behavior, pop-up notifications closely follow the behavior of an indirect
146notification's interstitial screen. Back dismisses the pop-up notification. If the user navigates
147from the pop-up into the notifying app, Up and Back follow the rules for standard notifications,
148navigating within the app.</p>
149
150<img src="{@docRoot}design/media/navigation_popup_notification.png">
151
152<h2 id="between-apps">Navigation Between Apps</h2>
153
154<p>One of the fundamental strengths of the Android system is the ability for apps to activate each
155other, giving the user the ability to navigate directly from one app into another. For example, an
156app that needs to capture a photo can activate the Camera app, which will return the photo
157to the referring app. This is a tremendous benefit to both the developer, who can easily leverage
158code from other apps, and the user, who enjoys a consistent experience for commonly performed
159actions.</p>
160
161<p>To understand app-to-app navigation, it's important to understand the Android framework behavior
162discussed below.</p>
163
164<h4>Activities, tasks, and intents</h4>
165
166<p>In Android, an <strong>activity</strong> is an application component that defines a screen of
167information and all of the associated actions the user can perform. Your app is a collection of
168activities, consisting of both the activities you create and those you re-use from other apps.</p>
169
170<p>A <strong>task</strong> is the sequence of activities a user follows to accomplish a goal. A
171single task can make use of activities from just one app, or may draw on activities from a number
172of different apps.</p>
173
174<p>An <strong>intent</strong> is a mechanism for one app to signal it would like another
175app's assistance in performing an action. An app's activities can indicate which intents
176they can respond to. For common intents such as "Share", the user may have many apps installed
177that can fulfill that request.</p>
178
179<h4>Example: navigating between apps to support sharing</h4>
180
181<p>To understand how activities, tasks, and intents work together, consider how one app allows users
182to share content by using another app. For example, launching the Play Store app from Home begins
183new Task A (see figure below). After navigating through the Play Store and touching a promoted book
184to see its details, the user remains in the same task, extending it by adding activities. Triggering
185the Share action prompts the user with a dialog listing each of the activities (from different apps)
186which have registered to handle the Share intent.</p>
187
188<img src="{@docRoot}design/media/navigation_between_apps_inward.png">
189
190<p>When the user elects to share via Gmail, Gmail's compose activity is added as a continuation of
191Task A&mdash;no new task is created. If Gmail had its own task running in the background, it would
192be unaffected.</p>
193
194<p>From the compose activity, sending the message or touching the Back button returns the user to
195the book details activity. Subsequent touches of Back continue to navigate back through the Play
196Store, ultimately arriving at Home.</p>
197
198<img src="{@docRoot}design/media/navigation_between_apps_back.png">
199
200<p>However, by touching Up from the compose activity, the user indicates a desire to remain within
201Gmail. Gmail's conversation list activity appears, and a new Task B is created for it. New tasks are
202always rooted to Home, so touching Back from the conversation list returns there.</p>
203
204<img src="{@docRoot}design/media/navigation_between_apps_up.png">
205
206<p>Task A persists in the background, and the user may return to it later (for example, via the
207Recents screen). If Gmail already had its own task running in the background, it would be replaced
208with Task B&mdash;the prior context is abandoned in favor of the user's new goal.</p>
209
210<p>When your app registers to handle intents with an activity deep within the app's hierarchy,
211refer to <a href="#into-your-app">Navigation into Your App via Home Screen Widgets and
212Notifications</a> for guidance on how to specify Up navigation.</p>