| page.title=Screen Compatibility Mode | |
| excludeFromSuggestions=true | |
| parent.title=Supporting Multiple Screens | |
| parent.link=screens_support.html | |
| @jd:body | |
| <div id="qv-wrapper"> | |
| <div id="qv"> | |
| <h2>In this document</h2> | |
| <ol> | |
| <li><a href="#Disable">Disabling Screen Compatibility Mode</a></li> | |
| <li><a href="#Enable">Enabling Screen Compatibility Mode</a></li> | |
| </ol> | |
| <h2>See also</h2> | |
| <ol> | |
| <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li> | |
| <li><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a></li> | |
| </ol> | |
| </div> | |
| </div> | |
| <div class="figure" style="width:500px;"> | |
| <a href="{@docRoot}images/screens_support/compat-zoom.png"> | |
| <img src="{@docRoot}images/screens_support/compat-zoom-thumb.png" alt="" /> | |
| </a> | |
| <p class="img-caption"><strong>Figure 1.</strong> An application running in compatibility mode | |
| on an Android 3.2 tablet.</p> | |
| </div> | |
| <div class="figure" style="width:500px;"> | |
| <a href="{@docRoot}images/screens_support/compat-stretch.png"> | |
| <img src="{@docRoot}images/screens_support/compat-stretch-thumb.png" alt="" /> | |
| </a> | |
| <p class="img-caption"><strong>Figure 2.</strong> The same application from figure 1, with | |
| compatibility mode disabled.</p> | |
| </div> | |
| <p class="caution"><strong>Notice:</strong> If you've developed an application for a version of | |
| Android lower than Android 3.0, but it does resize properly for larger screens such as tablets, you | |
| should disable screen compatibility mode in order to maintain the best user experience. To learn how | |
| to quickly disable the user option, jump to <a href="#Disable">Disabling Screen Compatibility | |
| Mode</a>.</p> | |
| <p>Screen compatibility mode is an escape hatch for applications that are not properly designed | |
| to resize for larger screens such as tablets. Since Android 1.6, Android has supported a | |
| variety of screen sizes and does most of the work to resize application layouts so that they | |
| properly fit each screen. However, if your application does not successfully follow the guide to | |
| <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>, | |
| then it might encounter some rendering issues on larger screens. For applications with this | |
| problem, screen compatibility mode can make the application a little more usable on larger | |
| screens.</p> | |
| <p>There are two versions of screen compatibility mode with slightly different behaviors:</p> | |
| <dl> | |
| <dt>Version 1 (Android 1.6 - 3.1)</dt> | |
| <dd>The system draws the application's UI in a "postage stamp" | |
| window. That is, the system draws the application's layout the same as it would on a | |
| normal size handset (emulating a 320dp x 480dp screen), with a black border that fills | |
| the remaining area of the screen. | |
| <p>This was introduced with Android 1.6 to handle apps that were designed only for the | |
| original screen size of 320dp x 480dp. Because there are so few active devices remaining that run | |
| Android 1.5, almost all applications should be developed against Android 1.6 or greater and | |
| should not have version 1 of screen compatibility mode enabled for larger screens. This version | |
| is considered obsolete.</p> | |
| <p>To disable this version of screen compatibility mode, you simply need to set <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, or set <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html#resizeable">{@code | |
| android:resizeable}</a> to {@code "true"}.</p> | |
| </dd> | |
| <dt>Version 2 (Android 3.2 and greater)</dt> | |
| <dd>The system draws the application's layout the same as | |
| it would on a normal size handset (approximately emulating a 320dp x 480dp screen), then scales it | |
| up to fill the screen. This essentially "zooms" in on your layout to make it bigger, | |
| which will usually cause artifacts such as blurring and pixelation in your UI. | |
| <p>This was introduced with Android 3.2 to further | |
| assist applications on the latest tablet devices when the applications have not yet | |
| implemented techniques for <a | |
| href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple | |
| Screens</a>.</p> | |
| <p>In general, large screen devices running Android 3.2 or higher allow users to enable | |
| screen compatibility mode when the application does not <strong>explicitly declare that it supports | |
| large screens</strong> in the manifest file. When this is the case, an icon (with | |
| outward-pointing arrows) appears next to the clock in the system bar, which allows the user to | |
| toggle screen compatibility mode on and off (figure 3). An application can also explicitly | |
| declare that it <em>does not</em> support large screens such that screen compatibility mode | |
| is always enabled and the user cannot disable it. (How to declare your application's | |
| support for large screens is discussed in the following sections.)</p></dd> | |
| </dl> | |
| <img src="{@docRoot}images/screens_support/compat-toggle.png" alt="" /> | |
| <p class="img-caption"><strong>Figure 3.</strong> The pop up menu to toggle screen compatibility | |
| mode (currently disabled, so normal resizing occurs).</p> | |
| <p>As a developer, you have control over when your application uses screen compatibility mode. The | |
| following sections describe how you can choose to disable or enable screen compatibility mode for | |
| larger screens when running Android 3.2 or higher.</p> | |
| <h2 id="Disable">Disabling Screen Compatibility Mode</h2> | |
| <p>If you've developed your application primarily for versions of Android lower than 3.0, but | |
| <strong>your application does resize properly</strong> for larger screens such as tablets, | |
| <strong>you should disable screen compatibility mode</strong> in order to maintain the best user | |
| experience. Otherwise, users may enable screen compatibility mode and experience your application in | |
| a less-than-ideal format.</p> | |
| <p>By default, screen compatibility mode for devices running Android 3.2 and higher is offered to | |
| users as an optional feature when one of the following is true:</p> | |
| <ul> | |
| <li>Your application has set both <a | |
| href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a> | |
| and <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code | |
| android:targetSdkVersion}</a> to {@code "10"} or lower and <strong>does not explicitly | |
| declare support</strong> for large screens using the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element.</li> | |
| <li>Your application has 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 "11"} or higher and <strong>explicitly declares that it does | |
| not support</strong> large screens, using the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element.</li> | |
| </ul> | |
| <p>To completely disable the user option for screen compatibility mode and remove the icon in the | |
| system bar, you can do one of the following:</p> | |
| <ul> | |
| <li><strong>Easiest:</strong> | |
| <p>In your manifest file, add the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element and specify the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html#xlarge">{@code | |
| android:xlargeScreens}</a> attribute to {@code "true"}:</p> | |
| <pre> | |
| <supports-screens android:xlargeScreens="true" /> | |
| </pre> | |
| <p>That's it. This declares that your application supports all larger screen sizes, so the | |
| system will always resize your layout to fit the screen. This works regardless of what values | |
| you've set in the <a | |
| href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> | |
| attributes.</p> | |
| </li> | |
| <li><strong>Easy but has other effects:</strong> | |
| <p>In your manifest's <a | |
| href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code <uses-sdk>}</a> | |
| element, set <a | |
| href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code | |
| android:targetSdkVersion}</a> to {@code "11"} or higher:</p> | |
| <pre> | |
| <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /> | |
| </pre> | |
| <p>This declares that your application supports Android 3.0 and, thus, is designed to | |
| work on larger screens such as tablets.</p> | |
| <p class="caution"><strong>Caution:</strong> When running on Android 3.0 and greater, this also | |
| has the effect of enabling the Holographic theme for you UI, adding the <a | |
| href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> to your activities, and removing the | |
| Options Menu button in the system bar.</p> | |
| <p>If screen compatibility mode is still enabled after you change this, check your manifest's <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> and be sure that there are no attributes set {@code "false"}. The best | |
| practice is to always explicitly declare your support for different screen sizes using the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element, so you should use this element anyway.</p> | |
| <p>For more information about updating your application to target Android 3.0 devices, read <a | |
| href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android | |
| 3.0</a>.</p> | |
| </li> | |
| <!-- | |
| <li><strong>Most control</strong> (but you must compile against Android 3.2 or higher): | |
| <p>In your manifest file, add the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element and specify the {@code android:compatibleWidthLimitDp} | |
| attribute to any value <em>higher than</em> {@code "320"}:</p> | |
| <pre> | |
| <supports-screens android:compatibleWidthLimitDp="720" /> | |
| </pre> | |
| <p>Using this technique allows you to specify exactly what your application's limit is for | |
| layout resizing. Normally, only applications that are already built against Android 3.2 (or | |
| higher) use this attribute, because the primary intention is to specify at what size should screen | |
| compatibility mode actually be offered to users.</p> | |
| <p class="note"><strong>Note:</strong> Currently, screen compatibility mode only emulates | |
| handset screens with a 320dp width, so screen compatibility mode is not applied to any device if | |
| your value for {@code android:compatibleWidthLimitDp} is larger than 320.</p> | |
| </li> | |
| --> | |
| </ul> | |
| <h2 id="Enable">Enabling Screen Compatibility Mode</h2> | |
| <p>When your application is targeting Android 3.2 (API level 13) or higher, you can affect | |
| whether compatibility mode is enabled for certain screens by using the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element.</p> | |
| <p class="note"><strong>Note:</strong> Screen compatibility mode is <strong>not</strong> a mode in | |
| which you should want your application to run—it causes pixelation and blurring in your UI, | |
| due to zooming. The proper way to make your application work well on large screens is to follow the | |
| guide to <a | |
| href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> and | |
| provide alternative layouts for different screen sizes.</p> | |
| <p>By default, when you've 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 "11"} or higher, screen compatibility mode is | |
| <strong>not</strong> available to users. If either of these are true and your application does not | |
| resize properly for larger screens, you can choose to enable screen compatibility mode in one | |
| of the following ways:</p> | |
| <ul> | |
| <li>In your manifest file, add the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code | |
| <supports-screens>}</a> element and specify the <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html#compatibleWidth">{@code | |
| android:compatibleWidthLimitDp}</a> attribute to {@code "320"}:</p> | |
| <pre> | |
| <supports-screens android:compatibleWidthLimitDp="320" /> | |
| </pre> | |
| <p>This indicates that the maximum "smallest screen width" for which your application is designed | |
| is 320dp. This way, any devices with their smallest side being larger than this value will offer | |
| screen compatibility mode as a user-optional feature.</p> | |
| <p class="note"><strong>Note:</strong> Currently, screen compatibility mode only emulates | |
| handset screens with a 320dp width, so screen compatibility mode is not applied to any device if | |
| your value for <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html#compatibleWidth">{@code | |
| android:compatibleWidthLimitDp}</a> is larger than 320.</p> | |
| </li> | |
| <li>If your application is functionally broken when resized for large screens and you want to | |
| force users into screen compatibility mode (rather than simply providing the option), you can use | |
| the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html#largestWidth">{@code | |
| android:largestWidthLimitDp}</a> attribute: | |
| <pre> | |
| <supports-screens android:largestWidthLimitDp="320" /> | |
| </pre> | |
| <p>This works the same as <a | |
| href="{@docRoot}guide/topics/manifest/supports-screens-element.html#compatibleWidth">{@code | |
| android:compatibleWidthLimitDp}</a> except it force-enables | |
| screen compatibility mode and does not allow users to disable it.</p> | |
| </li> | |
| </ul> |