summaryrefslogtreecommitdiffstats
path: root/docs/html/guide/practices/screens-support-1.5.jd
blob: 6fd36bb2d79a8e63134987cfa7e97bb3cc175429 (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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
page.title=Strategies for Android 1.5
parent.title=Supporting Multiple Screens
parent.link=screens_support.html

@jd:body

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

  <h2>Quickview</h2>
  <ul>
    <li>Apps developed for Android 1.5 and below support only the baseline screen
configuration, by default</li>
    <li>There are some simple steps you should take to enable support for multiple screens in
an application designed for Android 1.5</li>
  </ul>

  <h2>In this document</h2>
  <ol>
    <li><a href="#strategies">Adding Multiple Screens Support</a></li>
    <li><a href="#CompatMode">Compatibility Mode</a></li>
  </ol>

  <h2>See also</h2>
  <ol>
    <li><a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
  </ol>

</div>
</div>


<p>All applications written for Android 1.5 or earlier, by default, support only the
baseline HVGA screen used on the T-Mobile G1 and similar devices, which is <em>normal</em> screen
size and medium density (<em>mdpi</em>). Android 1.6 introduced support for different screen
configurations and added APIs that allow applications to control how they operate on different
screens, using alternative resources for different screen configurations.</p>

<p>If your manifest file includes the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> element,
with the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
attribute set to {@code "3"} or lower, and does <em>not</em> include the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> set to {@code "4"} or higher, then this document is for you. By
default, an application written for Android 1.5 or below that does not set the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> set to {@code "4"} or higher runs in <a
href="#CompatMode">compatibility mode</a> when on a device with a screen larger than the
<em>normal</em> screen size (basically, the system displays the application in a small window
that is roughly the size of the normal screen size).</p>

<p>This document describes how to get your application out of <a href="#CompatMode">compatibility
mode</a> and instead support multiple screens, but also maintain compatibility with Android 1.5 and
below.</p>

<p class="note"><strong>Note:</strong> Before you begin, you should first decide whether it's even
necessary to support Android 1.5. To see the relative number of devices that are still running
Android 1.5, see the <a
href="http://developer.android.com/resources/dashboard/platform-versions.html">Platform Versions
Dashboard</a>.</p>




<h2 id="strategies">Adding Multiple Screens Support</h2>

<p>If you have already developed and published an Android application based on
Android 1.5 or earlier platform version, and want to maintain compatibility with Android 1.5, you
need to make some changes to your application in order for it to properly run on newer devices with
different screen configurations. You should be able to make these changes to your application such
that you can distribute a single {@code .apk} to all devices.</p>

<p>The recommended strategy is to develop your application against Android 1.6 (because it's the
lowest version that includes support for multiple screens) and test your application on each
platform version your application supports (especially the minimum platform, such as Android 1.5).
Here's how to do that:</p>

<ol>
  <li>Maintain compatibility with existing devices by leaving your application's <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
attribute as it is. You <em>do not</em> need to increment the value of the attribute to support new
devices and multiple screens. </li>
  <li>Extend compatibility for Android 1.6 (and higher) devices by adding <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> element.
Set the value of <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to <code>"4"</code>. This allows your application to "inherit" the
platform's multiple screens support, even though it is technically using an earlier version of the
API.
  <p>Adding this attribute will cause an error in the compiler, because the attribute is unknown to
Android 1.5. You'll fix this next.</p></li>
  <li>Change your application's build properties, such that it compiles against the Android 1.6 (API
Level 4) library, rather than against the Android 1.5 (or earlier) library. You must do this in
order for your application to successfully compile when using the new manifest attributes. Older
versions of the platform simply ignore the attributes they don't know, so your application still
runs fine on them, as long as you don't use APIs in your application code from Android 1.6. </li>
</ol>

<p>Your application is now prepared to run on multiple screens, while maintaining support for
Android 1.5 or lower.</p>

<p>Here's how you should begin testing your application:</p>

<ol>
  <li>Set up AVDs for testing your application on Android 1.6 and some new versions. Create AVDs
that use the screen sizes and densities that you want to support. When you create the AVDs, make
sure to select the Android 1.6 or higher platform as the system image to use. For more information,
see <a href="{@docRoot}guide/practices/screens_support.html#testing">How to Test Your Application on
Multiple Screens</a>.</li>
  <li>Set up AVDs for testing your application on older versions of the platform, as low as the
version declared by your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>.
You need AVDs running the older platforms you are targeting, so that you can ensure there are
no functional regressions.</li>
  <li>Compile your application against the Android 1.6 library and run it on the AVDs you created.
Observe the way your application looks and runs, and test all of the user interactions.</li>
  <li>Debug any display or functional issues. For issues that you resolve in
your application code, <span style="color:red">make certain not to use any APIs
introduced later than the version declared by your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a></span>. If you
are in doubt, refer to SDK reference documentation and look for the API Level specifier for the API
you want to use. Using newer APIs not supported by your minimum version will mean that your
application will no longer be compatible with devices running on that version.</li>
</ol>

<p>In particular, remember to test your application on an AVD that emulates a small-screen device.
Users of devices with QVGA resolution at low density may want to download your application, so you
should understand how your application will look and function on a small-screen device. In some
cases, the reduced screen area and density mean that you need to make tradeoffs in design on those
devices.</p>

<p>Also give extra attention to testing your application on an AVD that emulates an <em>xlarge</em>
screen. Devices with extra large screens are tablet-sized or larger, so you should pay close
attention to how usable your application is on such screens. You might want to design new layouts
specifically for extra large screens, to address usability aspects such as the location and size of
buttons in your UI. To test your application on an extra large screen, create an AVD targeted to
Android 3.0 and use the WXGA emulator skin.</p>

<p>Once you've completed the procedures above, you should follow the recommendations in <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> to add
complete support for different screen configurations.</p>


<h2 id="CompatMode">Compatibility Mode</h2>

<div class="figure" style="width:450px;margin:0">
<img src="{@docRoot}images/screens_support/compat-mode-on.png" alt="" />
<p class="img-caption"><strong>Figure 1.</strong> An application running in compatibility mode
on an extra large screen.</p>
</div>

<p>To allow applications to run on larger screens without stretching the UI, Android provides a
compatibility mode that draws an application's UI in a "postage stamp" window when on larger
screens. That is, the system displays the application at the baseline size (<em>normal</em>) and
density (<em>mdpi</em>), with a black border that fills the rest of the screen.</p>

<p>Compatibility mode exists primarily to support application's developed for Android 1.5 (or lower)
when running on larger screens, because multiple screen support was not added until Android 1.6,
older applications were not designed to support different screen configurations.</p>

<p>As such, if you've set your <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> to {@code "3"} or lower and have <em>not</em> set the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to {@code "4"} or higher, then compatibility mode is enabled and
the system will not scale your application, because your application implicitly declares that it
only supports the baseline screen configuration (normal screen size and medium density).</p>

<p>To disable compatibility mode, set either <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> or <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to {@code "4"} or higher. For more information, see the previous
section about <a href="#strategies">Adding Multiple Screens Support</a>.</p>

<p>You can also affect whether compatibility mode is enabled by using the <a
href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
&lt;supports-screens>}</a> element (you can enable it by setting {@code android:resizeable} or
specific screen sizes to {@code "false"}). However, you should not explicitly enable compatibility
mode for your application, but should instead apply the necessary techniques to <a
href="{@docRoot}guide/practices/screens_support.html">supporting multiple screens</a> and allow your
application to properly fit the screen on all screen sizes.</p>