summaryrefslogtreecommitdiffstats
path: root/docs/html/training/design-navigation/multiple-sizes.jd
blob: a0ce103b04a0ae9d3133f52d12bc177b16e0cf57 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
page.title=Planning for Multiple Touchscreen Sizes
parent.title=Designing Effective Navigation
parent.link=index.html

trainingnavtop=true
previous.title=Planning Screens and Their Relationships
previous.link=screen-planning.html
next.title=Providing Descendant and Lateral Navigation
next.link=descendant-lateral.html

meta.tags="multiple screens"
page.metaDescription=Designing an intuitive, effective navigation for tablets and other devices.
page.image=/images/training/app-navigation-multiple-sizes-strategy-stack.png

@jd:body

<div id="tb-wrapper">
<div id="tb">

<h2>This lesson teaches you to</h2>
<ol>
  <li><a href="#multi-pane-layouts">Group Screens with Multi-pane Layouts</a></li>
  <li><a href="#orientations">Design for Multiple Tablet Orientations</a></li>
  <li><a href="#group-screens">Group Screens in the Screen Map</a></li>
</ol>

<h2>You should also read</h2>
<ul>
  <li><a href="{@docRoot}design/patterns/multi-pane-layouts.html">Android Design: Multi-pane Layouts</a></li>
  <li><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></li>
</ul>

</div>
</div>


<p>The exhaustive screen map from the previous lesson isn't tied to a particular device form factor, although it can generally look and work okay on a handset or similar-size device. But Android applications need to adapt to a number of different types of devices, from 3" handsets to 10" tablets to 42" TVs. In this lesson we explore reasons and tactics for grouping together multiple screens from the exhaustive map.</p>

<p class="note"><strong>Note: </strong> Designing applications for television sets also requires attention to other factors, including interaction methods (i.e., the lack of a touch screen), legibility of text at large reading distances, and more. Although this discussion is outside the scope of this class, you can find more information on designing for TVs in the <a href="https://developers.google.com/tv">Google TV</a> documentation for <a href="https://developers.google.com/tv/android/docs/gtv_android_patterns">design patterns</a>.</p>

<h2 id="multi-pane-layouts">Group Screens with Multi-pane Layouts</h2>

<div class="note design">
<p><strong>Multi-pane Layout Design</strong></p>
  <p>For design guidelines, read Android Design's <a
  href="{@docRoot}design/patterns/multi-pane-layouts.html">Multi-pane Layouts</a> pattern guide.</p>
</div>

<p>3 to 4-inch screens are generally only suitable for showing a single vertical pane of content at a time, be it a list of items, or detail information about an item, etc. Thus on such devices, screens generally map one-to-one with levels in the information hierarchy (<em>categories</em> &rarr; <em>object list</em> &rarr; <em>object detail</em>).</p>

<p>Larger screens such as those found on tablets and TVs, on the other hand, generally have much more available screen space and are able to present multiple panes of content. In landscape, panes are usually ordered from left to right in increasing detail order. Users are especially accustomed to multiple panes on larger screens from years and years of desktop application and desktop web site use. Many desktop applications and websites offer a left-hand navigation pane or use a master/detail two-pane layout.</p>

<p>In addition to addressing these user expectations, it's usually necessary to provide multiple panes of information on tablets to avoid leaving too much whitespace or unwittingly introducing awkward interactions, for example 10 x 0.5-inch buttons.</p>

<p>The following figures demonstrate some of the problems that can arise when moving a UI (user interface) design into a larger layout and how to address these issues with multi-pane layouts:</p>


<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-bad.png"
  alt="Single pane layouts on large screens in landscape lead to awkward whitespace and exceedingly long line lengths" id="figure-multipane-bad">

<p class="img-caption"><strong>Figure 1.</strong> Single pane layouts on large screens in landscape lead to awkward whitespace and exceedingly long line lengths.</p>


<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-good.png"
  alt="Multi-pane layouts in landscape offer better a visual balance while offering more utility and legibility" id="figure-multipane-good">

<p class="img-caption"><strong>Figure 2.</strong> Multi-pane layouts in landscape result in a better visual balance while offering more utility and legibility.</p>


<p class="note"><strong>Implementation Note:</strong> After deciding on the screen size at which to draw the line between single-pane and multi-pane layouts, you can provide different layouts containing one or multiple panes for devices in varying screen size buckets (such as <code>large</code>/<code>xlarge</code>) or varying minimum screen widths (such as <code>sw600dp</code>).</p>

<p class="note"><strong>Implementation Note:</strong> While a single screen is implemented as an {@link android.app.Activity} subclass, individual content panes can be implemented as {@link android.app.Fragment} subclasses. This maximizes code re-use across different form factors and across screens that share content.</p>


<h2 id="orientations">Design for Multiple Tablet Orientations</h2>

<p>Although we haven't begun arranging user interface elements on our screens yet, this is a good time to consider how your multi-pane screens will adapt to different device orientations. Multi-pane layouts in landscape work quite well because of the large amount of available horizontal space. However, in the portrait orientation, your horizontal space is more limited, so you may need to design a separate layout for this orientation.</p>

<p>Below are a few common strategies for creating portrait tablet layouts.</p>

<ul>
  <li><strong>Stretch</strong>
    <img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-stretch.png"
      alt="Stretch strategy">
    <p>The most straightforward strategy is to simply stretch each pane's width to best present the content in each pane in the portrait orientation. Panes could have fixed widths or take a certain percentage of the available screen width.</p></li>

  <li><strong>Expand/collapse</strong>
    <img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-collapse.png"
      alt="Expand/collapse strategy">
    <p>A variation on the stretch strategy is to collapse the contents of the left pane when in portrait. This works quite well with master/detail panes where the left (master) pane contains easily collapsible list items. An example would be for a realtime chat application. In landscape, the left list could contain chat contact photos, names, and online statuses. In portrait, horizontal space could be collapsed by hiding contact names and only showing photos and online status indicator icons. Optionally also provide an expand control that allows the user to expand the left pane content to its larger width and vice versa.</p></li>

  <li><strong>Show/Hide</strong>
    <img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-show-hide.png"
      alt="Show/Hide strategy">
    <p>In this scenario, the left pane is completely hidden in portrait mode. However, <em>to ensure the functional parity</em> of your screen in portrait and landscape, the left pane should be made available via an onscreen affordance (such as a button). It's usually appropriate to use the <em>Up</em> button in the Action Bar (<a href="{@docRoot}design/patterns/actionbar.html">pattern docs</a> at Android Design) to show the left pane, as is discussed in a <a href="ancestral-temporal.html">later lesson</a>.</p></li>

  <li><strong>Stack</strong>
    <img src="{@docRoot}images/training/app-navigation-multiple-sizes-strategy-stack.png"
      alt="Stack strategy">
    <p>The last strategy is to vertically stack your normally horizontally-arranged panes in portrait. This strategy works well when your panes aren't simple text-based lists, or when there are multiple blocks of content running along the primary content pane. Be careful to avoid the awkward whitespace problem discussed above when using this strategy.</p></li>

</ul>


<h2 id="group-screens">Group Screens in the Screen Map</h2>

<p>Now that we are able to group individual screens together by providing multi-pane layouts on larger-screen devices, let's apply this technique to our exhaustive screen map from the <a href="screen-planning.html">previous lesson</a> to get a better sense of our application's hierarchy on such devices:</p>


<img src="{@docRoot}images/training/app-navigation-multiple-sizes-multipane-screen-map.png"
  alt="Updated example news application screen map for tablets" id="figure-multipane-screen-map">

<p class="img-caption"><strong>Figure 3.</strong> Updated example news application screen map for tablets.</p>


<p>In the next lesson we discuss <em>descendant</em> and <em>lateral</em> navigation, and explore more ways of grouping screens to maximize the intuitiveness and speed of content access in the application's user interface.</p>