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