page.title=Android 3.0 Platform
sdk.platform.version=3.0
sdk.platform.apiLevel=11
@jd:body

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

<h2>In this document</h2>
<ol>
  <li><a href="#relnotes">Revisions</a></li>
  <li><a href="#api">API Overview</a></li>
  <li><a href="#api-level">API Level</a></li>
  <li><a href="#apps">Built-in Applications</a></li>
  <li><a href="#locs">Locales</a></li>
  <li><a href="#skins">Emulator Skins</a></li>
</ol>

<h2>Reference</h2>
<ol>
<li><a
href="{@docRoot}sdk/api_diff/11/changes.html">API
Differences Report &raquo;</a> </li>
</ol>

<h2>See Also</h2>
<ol>
  <li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0</a></li>
</ol>

</div>
</div>


<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>

<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
component for the Android SDK. The downloadable platform includes an Android library and system
image, as well as a set of emulator skins and more. The downloadable platform includes no external
libraries.</p>

<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
Manager to download the platform into your SDK. For more information, see <a
href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>. If you are new to Android, <a
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>

<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
Highlights</a>.</p>

<p class="note"><strong>Note:</strong>
If you've already published an Android application, please test and optimize your application on
Android 3.0 as soon as possible. You should do so to be sure your application provides the best
experience possible on the latest Android-powered devices. For information about what you can do,
read <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android
3.0</a>.</p>


<h2 id="relnotes">Revisions</h2>

<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>


<div class="toggle-content opened" style="padding-left:1em;">

  <p><a href="#" onclick="return toggleContent(this)">
    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt="" />
    Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
  </a></p>

  <div class="toggle-content-toggleme" style="padding-left:2em;">
    
<dl>
  
<dt>Dependencies:</dt>
<dd>
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
</dd>

</dl>

  </div>
</div>



<h2 id="#api">API Overview</h2>

<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
including new features and changes in the framework API since the previous version.</p>





<h3>Fragments</h3>

<p>A fragment is a new framework component that allows you to separate distinct elements of an
activity into self-contained modules that define their own UI and lifecycle. To create a
fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
fragments in a single activity to build a multi-pane UI in which each
pane manages its own lifecycle and user inputs.</p>

<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
for the activity, such as to manage the progress of a download that occurs only while the
activity is running.</p>

<p>Additionally:</p>

<ul>
  <li>Fragments are self-contained and you can reuse them in multiple activities</li>
  <li>You can add, remove, replace and animate fragments inside the activity</li>
  <li>You can add fragments to a back stack managed by the activity, preserving the state of
fragments as they are changed and allowing the user to navigate backward through the different
states</li>
  <li>By <a
href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
alternative layouts</a>, you can mix and match fragments, based
on the screen size and orientation</li>
  <li>Fragments have direct access to their container activity and can contribute items to the
activity's Action Bar (discussed next)</li>
</ul>

<p>To manage the fragments in your activity, you must use the {@link
android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
as finding fragments in the activity and popping fragments off the back stack to restore their
previous state.</p>

<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
android.app.FragmentTransaction}. You can then call methods such as {@link
android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
remove()}, or {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
the changes you want to perform for the transaction, you must call {@link
android.app.FragmentTransaction#commit commit()} and the system applies the fragment transaction to
the activity.</p>

<p>For more information about using fragments, read the <a
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation. Several
samples are also available in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
API Demos</a> application.</p>




<h3>Action Bar</h3>

<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
It includes the application logo in the left corner and provides a new interface for items in the
<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
Action Bar allows you to:</p>

<ul>
  <li>Add menu items directly in the Action Bar&mdash;as "action items."
    <p>In your XML declaration for the menu item, include the {@code
android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
item appears directly in the Action Bar. Otherwise, the item is placed in the
overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>

  <li>Replace an action item with a widget (such as a search box)&mdash;creating an
"action view."
    <p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>

  <li>Add an action to the application logo and replace it with a custom logo
    <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
method to perform an action such as go to your application's "home" activity.</p>
    <p>To replace the icon with a logo, specify your application logo in the manifest file with the
<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
setDisplayUseLogoEnabled(true)} in your activity.</p></li>

  <li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
  <li>Add tabs or a drop-down list to navigate through fragments</li>
  <li>Customize the Action Bar with themes and backgrounds</li>
</ul>

<p>The Action Bar is standard for all applications that use the new holographic theme, which is
also standard when you set either the <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"}.</p>

<p>For more information about the Action Bar, read the <a
href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation. Several
samples are also available in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">
API Demos</a> application.</p>




<h3>System clipboard</h3>

<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
clipboard. Clipped data can be plain text, a URI, or an intent.</p>

<p>By providing the system access to the data you want the user to copy, through a content provider,
the user can copy complex content (such as an image or data structure) from your application and
paste it into another application that supports that type of content.</p>

<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>

<p>To copy an item to the clipboard, you need to create a new {@link
android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
objects, each describing a single entity. To create a {@link android.content.ClipData} object
containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
{@link android.content.ClipData.Item} you provide.</p>

<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
android.content.ClipboardManager}.</p>

<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
android.content.ClipboardManager#getPrimaryClip()} on the {@link
android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
be complicated and you need to be sure you can actually handle the data type in the clipboard
before attempting to paste it.</p>

<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
android.content.ClipData.Item}s.</p>

<p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.
html">API Demos</a> and a more complete implementation in the <a
href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>




<h3>Drag and drop</h3>

<p>New APIs simplify drag and drop operations in your application's user interface. A drag
operation is the transfer of some kind of data&mdash;carried in a {@link android.content.ClipData}
object&mdash;from one place to another. The start and end point for the drag operation is a {@link
android.view.View}, so the APIs that directly handle the drag and drop operations are
in the {@link android.view.View} class.</p>

<p>A drag and drop operation has a lifecycle that's defined by several drag actions&mdash;each
defined by a {@link android.view.DragEvent} object&mdash;such as {@link
android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
operation can listen for these actions.</p>

<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
information about the drag object with views that may receive the object.</p>

<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the  {@link
android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
describing the type of drag action has occurred (such as {@link
android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
stream of drag events. The receiving view can inquire the event type delivered to {@link
android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
getAction()} on the {@link android.view.DragEvent}.</p>

<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
operation should never put the dragged data in the system clipboard.</p>

<p>For more information, read the <a href="{@docRoot}guide/topics/ui/drag-drop.html">Dragging and
Dropping</a> documentation. You can also see an implementation of drag and drop in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
API Demos</a> application and the <a
href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
application.</p>



<h3>App widgets</h3>

<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
android.widget.AdapterViewFlipper}.</p>

<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
such as from a content provider.</p>

<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
&lt;appwidget-provider&gt;} element) also supports two new fields: {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
app widget subview that should be auto-advanced by the app widget’s host. The
{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
app widget looks like and is shown to the user from the widget picker. If this field is not
supplied, the app widget's icon is used for the preview.</p>

<p>To help create a preview image for your app widget (to specify in the {@link
android.appwidget.AppWidgetProviderInfo#previewImage} field), the Android emulator includes an
application called "Widget Preview." To create a preview image, launch this application, select the
app widget for your application and set it up how you'd like your preview image to appear, then save
it and place it in your application's drawable resources.</p>

<p>You can see an implementation of the new app widget features in the <a
href="{@docRoot}resources/samples/StackWidget/index.html">StackView App Widget</a> and <a
href="{@docRoot}resources/samples/WeatherListWidget/index.html">Weather List Widget</a>
applications.</p>



<h3>Status bar notifications</h3>

<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
create {@link android.app.Notification} objects.</p>
<p>New features include:</p>
<ul>
  <li>Support for a large icon in the notification, using {@link
android.app.Notification.Builder#setLargeIcon setLargeIcon()}. This is usually for
social applications to show the contact photo of the person who is the source of the
notification or for media apps to show an album thumbnail.</li>
  <li>Support for custom layouts in the status bar ticker, using {@link
android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
  <li>Support for custom notification layouts to include buttons with {@link
android.app.PendingIntent}s, for more interactive notification widgets. For example, a
notification can control music playback without starting an activity.</li>
</ul>



<h3>Content loaders</h3>

<p>New framework APIs facilitate asynchronous loading of data using the {@link
android.content.Loader} class. You can use it in combination with UI components such as views and
fragments to dynamically load data from worker threads. The {@link
android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
a {@link android.content.ContentProvider}.</p>

<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
loader for your activity or fragment.</p>

<p>For more information, read the <a
href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
example code using loaders in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentListCursorLoader.html">FragmentListCursorLoader</a>
and <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
LoaderThrottle</a> samples.</p>



<h3>Bluetooth A2DP and headset APIs</h3>

<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
headset profile devices. For example, applications can identify when a Bluetooth headset is
connected for listening to music and notify the user as appropriate. Applications can also receive
broadcasts for vendor specific AT commands and notify the user about the state of the connected
device, such as when the connected device's battery is low.</p>

<p>You can initialize the respective {@link android.bluetooth.BluetoothProfile} by calling {@link
android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
callbacks when the Bluetooth client is connected or disconnected.</p>




<h3 id="animation">Animation framework</h3>

<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
animation, such as:</p>
<ul>
  <li>Duration</li>
  <li>Repeat amount and behavior</li>
  <li>Type of time interpolation</li>
  <li>Animator sets to play animations together, sequentially, or after specified delays</li>
  <li>Frame refresh delay</li>
</ul>

 <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
color values, by default. That is, when an object has a property field for one of these types, you
can change its value over time to affect an animation. To animate any other type of value, you tell
the system how to calculate the values for that given type, by implementing the {@link
android.animation.TypeEvaluator} interface.</p>

<p>There are two animators you can use to animate the values of a property: {@link
android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
object or property that is animated as a result. It simply performs the calculations, and you must
listen for the updates and process the data with your own logic. The {@link
android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
allows you to set the object and property to animate, and it handles all animation work.
That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
property of the object to change over time, and a set of values to apply to the property over
time, then start the animation.</p>

<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
animations for changes you make to your activity layout. To enable transitions for part of the
layout, create a {@link android.animation.LayoutTransition} object and set it on
any {@link android.view.ViewGroup} by calling {@link
android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
animations to run whenever items are added to or removed from the group. To specify custom
animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
android.animation.LayoutTransition} and provide a custom {@link android.animation.Animator},
such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
discussed above.</p>

<p>For more information, see the <a
href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> documentation. You can
also see several samples using the animation APIs in the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
Demos</a> application.</p>




<h3>Extended UI framework</h3>

<ul>
  
  <li><b>Multiple-choice selection for ListView and GridView</b>

<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
conjunction with the Action Bar, users can select multiple items and then select the action to
perform from a list of options in the Action Bar (which has transformed into a Multi-choice
Action Mode).</p>

<p>To enable multiple-choice selection, call {@link
android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>

<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
MultiChoiceModeListener} when items are selected by calling {@link
android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
onItemCheckedStateChanged()}.</p>

<p>For an example of multiple-choice selection, see the <a
href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
java</a>
class in the API Demos sample application.</p>
  </li>

  
  <li><b>New APIs to transform views</b>
  
    <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
layout. New transformations are made possible with a set of object properties that define the view's
layout position, orientation, transparency and more.</p>
    <p>New methods to set the view properties include: {@link android.view.View#setAlpha
setAlpha()}, {@link
android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>

    <p>Some methods also have a corresponding XML attribute that you can specify in your layout
file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
translationY}, {@code rotation},
{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
{@code transformPivotY}, and {@code alpha}.</p>

    <p>Using some of these new view properties in combination with the new <a
href="#animation">animation framework</a> (discussed
above), you can easily apply some fancy animations to your views. For example, to rotate a
view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
android.view.View}, the "rotationY" property, and the start and end values:</p>
<pre>
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
animator.setDuration(2000);
animator.start();
</pre>
  </li>

  
  <li><b>New holographic themes</b>

    <p>The standard system widgets and overall look have been redesigned and incorporate a new
"holographic" user interface theme. The system applies the new theme
using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>

<p>Any application that targets the Android 3.0 platform&mdash;by setting either the <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> value to {@code "11"}&mdash;inherits the holographic theme by default.
However, if your application also applies its own theme, then your theme will override the
holographic theme, unless you update your styles to inherit the holographic theme.</p>

<p>To apply the holographic theme to individual activities or to inherit them in your own theme
definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
themes. If your application is compatible with version of Android lower than 3.0 and applies
custom themes, then you should <a
href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
version</a>.</p>

  </li>
  
  
  <li><b>New widgets</b>

    <ul>
    <li>{@link android.widget.AdapterViewAnimator}
    <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
    between its views.</p></li>
    
    <li>{@link android.widget.AdapterViewFlipper}
    <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
    been added to it. Only one child is shown at a time. If requested, it can automatically flip
  between
    each child at a regular interval.</p></li>
    
    <li>{@link android.widget.CalendarView}
    <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
    
    <li>{@link android.widget.ListPopupWindow}
    <p>Anchors itself to a host view and displays a list of choices, such as for a list of
    suggestions when typing into an {@link android.widget.EditText} view.</p></li>
    
    <li>{@link android.widget.NumberPicker}
    <p>Enables the user to select a number from a predefined range. The widget presents an input
field and up and down buttons for selecting a number. Touching the input field allows the user to
scroll through values or touch again to directly edit the current value. It also allows you to map
positions to strings, so that the corresponding string is displayed instead of the index
position.</p></li>
    
    <li>{@link android.widget.PopupMenu}
    <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
keyboard) is visible, the popup does not overlap the IME it until the user touches the
menu.</p></li>
    
    <li>{@link android.widget.SearchView}
    <p>Provides a search box that you can configure to deliver search queries to a specified
activity and display search suggestions (in the same manner as the traditional search dialog). This
widget is particularly useful for offering a search widget in the Action Bar. For more information,
see <a href="{@docRoot}guide/topics/search/search-dialog.html">Creating a Search Interface.</p></li>
    
    <li>{@link android.widget.StackView}
    <p>A view that displays its children in a 3D stack and allows users to swipe through
  views like a rolodex.</p></li>
    
    </ul>
  </li>
  
</ul>



<h3>Graphics</h3>

<ul>
  <li><b>Hardware accelerated 2D graphics</b>

<p>You can now enable the OpenGL renderer for your application by setting {@code
android:hardwareAccelerated="true"} in your manifest element's <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
element or for individual <a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
elements.</p>

<p>This flag helps applications by making them draw faster. This results in smoother animations,
smoother scrolling, and overall better performance and response to user interaction.</p></li>


  <li><b>View support for hardware and software layers</b>
  
    <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
view be backed by either a hardware or software layer, specified by values {@link
android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
{@link android.view.View#setLayerType setLayerType()} or the <a
href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
attribute.</p>
    <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
acceleration is turned off, hardware layers behave exactly as software layers.</p>
    <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
avoided when the affected view tree updates often. Every update will require to re-render the
software layer, which can potentially be slow.</p>
    <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
  </li>
  

  <li><b>Renderscript 3D graphics engine</b>

<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
as a special, platform-independent shader language for maximum performance. Using Renderscript, you
can accelerate graphics operations and data processing. Renderscript is an ideal way to create
high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
<p>For more information, see the <a
href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
Renderscript</a> documentation.</p></li>
</ul>




<h3>Media</h3>


<ul>

  <li><b>Time lapse video</b>

<p>Camcorder APIs now support the ability to record time lapse video. The {@link
android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
should be captured.</p></li>

  <li><b>Texture support for image streams</b>
    
<p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES
texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your
{@link android.hardware.Camera} instance, you can specify the {@link
android.graphics.SurfaceTexture} upon which to draw video playback or preview frames from the
camera.</p></li>

  <li><b>HTTP Live streaming</b>
    
<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
streaming session. The media framework supports most of the HTTP Live streaming specification,
including adaptive bit rate. See the <a
href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
more information.</p></li>

  <li><b>EXIF data</b>
    
<p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure
time.</p></li>

  <li><b>Camcorder profiles</b>

<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
quality profiles (such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
android.media.CamcorderProfile#QUALITY_720P}, {@link
android.media.CamcorderProfile#QUALITY_CIF}, and others) allow you to determine camcorder
quality options.</p></li>

  <li><b>Digital media file transfer</b>

<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
which lets users easily transfer any type of media files between devices and to a host computer.
Developers can build on this support, creating applications that let users create or manage rich
media files that they may want to transfer or share across devices. </p></li>

  <li><b>Digital rights management (DRM)</b>

<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
rights. It's implemented in two architectural layers:</p>
<ul>
  <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
standard applications.</li>
  <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
plug-ins to handle rights management and decryption for various DRM schemes.</li>
</ul>

<p>For application developers, the framework offers an abstract, unified API that simplifies the
management of protected content. The API hides the complexity of DRM operations and allows a
consistent operation mode for both protected and unprotected content, and across a variety of DRM
schemes.</p>

<p>For device manufacturers, content owners, and Internet digital media providers the DRM
framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
Android system, for secure enforcement of content protection.</p>

<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>

<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>

</ul>



<h3>Keyboard support</h3>

<ul>
<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>

<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
Delete and others. You can determine whether key events are coming from a full keyboard by
querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>

<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A.  It also supports PageUp/PageDown,
Home/End, and keyboard-based text selection.</li>

<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
{@link android.view.KeyEvent#hasNoModifiers()},
{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>

<li>Applications can implement custom keyboard shortcuts by subclassing {@link
android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
{@link android.app.Activity#onKeyShortcut onKeyShortcut()}.  The framework calls this method
whenever a key is combined with Ctrl key.  When creating an <a
href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
android:numericShortcut} attribute for each <a
href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code &lt;item&gt;}</a>
element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>

<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
input.</li>

</ul>




<h3>Split touch events</h3>

<p>Previously, only a single view could accept touch events at one time. Android 3.0
adds support for splitting touch events across views and even windows, so different views can accept
simultaneous touch events.</p>

<p>Split touch events is enabled by default when an application targets
Android 3.0. That is, when the application has set either the <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> attribute's value to {@code "11"}.</p>

<p>However, the following properties allow you to disable split touch events across views inside
specific view groups and across windows.</p>

<ul>
<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
allows you to disable split touch events that occur between child views in a layout. For example:
<pre>
&lt;LinearLayout android:splitMotionEvents="false" ... >
    ...
&lt;/LinearLayout>
</pre>
<p>This way, child views in the linear layout cannot split touch events&mdash;only one view can
receive touch events at a time.</p>
</li>

<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
allows you to disable split touch events across windows, by applying it to a theme for the activity
or entire application. For example:
<pre>
&lt;style name="NoSplitMotionEvents" parent="android:Theme.Holo">
    &lt;item name="android:windowEnableSplitTouch">false&lt;/item>
    ...
&lt;/style>
</pre>
<p>When this theme is applied to an <a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> or <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>,
only touch events within the current activity window are accepted. For example, by disabling split
touch events across windows, the system bar cannot receive touch events at the same time as the
activity. This does <em>not</em> affect whether views inside the activity can split touch
events&mdash;by default, the activity can still split touch events across views.</p>

<p>For more information about creating a theme, read <a
href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
</li>
</ul>



<h3>WebKit</h3>

<ul>
  <li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
{@link android.webkit.WebView}.</li>
  <li>New {@link android.webkit.WebSettings} methods:
    <ul>
      <li>{@link
android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
{@code true}).</li>
      <li>New {@link android.webkit.WebSettings} method, {@link
android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
to maximize the performance (for example, the WebView's content may not update during the
transition).</li>
    </ul>
  <li>New {@link android.webkit.WebView} methods:
    <ul>
      <li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
network traffic when the WebView is not in the foreground.</li>
      <li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
onPause()}.</li>
      <li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
current view as a web archive on the device.</li>
      <li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
the current view.</li>
    </ul>
  </li>
</ul>



<h3>Browser</h3>

<p>The Browser application adds the following features to support web applications:</p>

<ul>
  <li><b>Media capture</b>
    <p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
specification, the Browser allows web applications to access audio, image and video capture
capabilities of the device. For example, the following HTML provides an input for the user to
capture a photo to upload:</p>
<pre>
&lt;input type="file" accept="image/*;capture=camera" />
</pre>
<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
new image with the camera or select one from the device (such as from the Gallery application).</p>
  </li>

  <li><b>Device Orientation</b>
    <p>As defined by the <a
href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
specification, the Browser allows web applications to listen to DOM events that provide information
about the physical orientation and motion of the device.</p>
    <p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
expressed with acceleration and rotation rate data. A web page can register for orientation
events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
and register for motion events by registering the {@code "devicemotion"} event type.</p>
  </li>
  
  <li><b>CSS 3D Transforms</b>
    <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
dimensions.</p>
  </li>
</ul>



<h3>JSON utilities</h3>

<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
read and write JSON streams. The new APIs complement the {@link org.json} classes, which manipulate
a document in memory.</p>

<p>You can create an instance of {@link android.util.JsonReader} by calling
its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
key name with {@link android.util.JsonReader#nextName()}, read the value using methods
respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
android.util.JsonReader#nextInt()}, and continue doing so while {@link
android.util.JsonReader#hasNext()} is true.</p>

<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
value.</p>

<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
method in each class configures them to be more liberal in what they accept. This lenient
parse mode is also compatible with the {@link org.json}'s default parser.</p>




<h3>New feature constants</h3>

<p>The <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> 
manfest element should be used to inform external entities (such as Android Market) of the set of
hardware and software features on which your application depends. In this release, Android adds the
following new constants that applications can declare with this element:</p>

<ul>
  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
    <p>When declared, this indicates that the application is compatible with a device that offers an
emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
system that can emulate a subset of touchscreen
capabilities. An example of such an input system is a mouse or remote control that drives an
on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
    <p>If your application does <em>not</em> require complicated gestures and you do
<em>not</em> want your application filtered from devices with an emulated touchscreen, you
should declare {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
element. This way, your application will be available to the greatest number of device types,
including those that provide only an emulated touchscreen input.</p>
    <p>All devices that include a touchscreen also support {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
a touchscreen, you should add a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
element for faketouch.</p>
  </li>
</ul>




<h3>New permissions</h3>

<ul>
  <li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
"android.permission.BIND_REMOTEVIEWS"}
  <p>This must be declared as a required permission in the <a
href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> manifest
element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
collection view, the manifest entry may look like this:</p>
<pre>
&lt;service android:name=".widget.WidgetService"
    android:exported="false"
    android:permission="android.permission.BIND_REMOTEVIEWS" />
</pre>
</ul>



<h3>New platform technologies</h3>

<ul>
<li><strong>Storage</strong>
  <ul>
  <li>ext4 file system support to enable onboard eMMC storage.</li>
  <li>FUSE file system to support MTP devices.</li>
  <li>USB host mode support to support keyboards and USB hubs.</li>
  <li>Support for MTP/PTP </li>
  </ul>
</li>

<li><strong>Linux Kernel</strong>
  <ul>
  <li>Upgraded to 2.6.36</li>
  </ul>
</li>

<li><strong>Dalvik VM</strong>
  <ul>
  <li>New code to support and optimize for SMP</li>
  <li>Various improvements to the JIT infrastructure</li>
  <li>Garbage collector improvements:
    <ul>
    <li>Tuned for SMP</li>
    <li>Support for larger heap sizes</li>
    <li>Unified handling for bitmaps and byte buffers</li>
    </ul>
  </li>
  </ul>
</li>

<li><strong>Dalvik Core Libraries</strong>
  <ul>
  <li>New, much faster implementation of NIO (modern I/O library)</li>
  <li>Improved exception messages</li>
  <li>Correctness and performance fixes throughout</li>
  </ul>
</li>
</ul>



<h3 id="api-diff">API differences report</h3>

<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
{@sdkPlatformApiLevel}), see the <a
href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>





<h2 id="api-level">API Level</h2>

<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
the framework API. The Android {@sdkPlatformVersion} API
is assigned an integer identifier &mdash;
<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
stored in the system itself. This identifier, called the "API Level", allows the
system to correctly determine whether an application is compatible with
the system, prior to installing the application. </p>

<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
you need compile the application against the Android library that is provided in
the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
manifest. If your application is designed to run only on Android 2.3 and higher,
declaring the attribute prevents the application from being installed on earlier
versions of the platform.</p>

<p>For more information about how to use API Level, see the <a
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>


<h2 id="apps">Built-in Applications</h2>

<p>The system image included in the downloadable platform provides these
built-in applications:</p>

<table style="border:0;padding-bottom:0;margin-bottom:0;">
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
<li>API Demos</li>
<li>Browser</li>
<li>Calculator</li>
<li>Camera</li>
<li>Clock</li>
<li>Contacts</li>
<li>Custom Locale</li>
<li>Dev Tools</li>
<li>Downloads</li>
<li>Email</li>
</ul>
</td>
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<ul>
<li>Gallery</li>
<li>Gestures Builder</li>
<li>Messaging</li>
<li>Music</li>
<li>Search</li>
<li>Settings</li>
<li>Spare Parts</li>
<li>Speech Recorder</li>
<li>Widget Preview</li>
</ul>
</td>
</tr>
</table>


<h2 id="locs" style="margin-top:.75em;">Locales</h2>

<p>The system image included in the downloadable SDK platform provides a variety of
built-in locales. In some cases, region-specific strings are available for the
locales. In other cases, a default version of the language is used. The
languages that are available in the Android 3.0 system
image are listed below (with <em>language</em>_<em>country/region</em> locale
descriptor).</p>

<table style="border:0;padding-bottom:0;margin-bottom:0;">
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
<li>Arabic, Egypt (ar_EG)</li>
<li>Arabic, Israel (ar_IL)</li>
<li>Bulgarian, Bulgaria (bg_BG)</li>
<li>Catalan, Spain (ca_ES)</li>
<li>Czech, Czech Republic (cs_CZ)</li>
<li>Danish, Denmark(da_DK)</li>
<li>German, Austria (de_AT)</li>
<li>German, Switzerland (de_CH)</li>
<li>German, Germany (de_DE)</li>
<li>German, Liechtenstein (de_LI)</li>
<li>Greek, Greece (el_GR)</li>
<li>English, Australia (en_AU)</li>
<li>English, Canada (en_CA)</li>
<li>English, Britain (en_GB)</li>
<li>English, Ireland (en_IE)</li>
<li>English, India (en_IN)</li>
<li>English, New Zealand (en_NZ)</li>
<li>English, Singapore(en_SG)</li>
<li>English, US (en_US)</li>
<li>English, Zimbabwe (en_ZA)</li>
<li>Spanish (es_ES)</li>
<li>Spanish, US (es_US)</li>
<li>Finnish, Finland (fi_FI)</li>
<li>French, Belgium (fr_BE)</li>
<li>French, Canada (fr_CA)</li>
<li>French, Switzerland (fr_CH)</li>
<li>French, France (fr_FR)</li>
<li>Hebrew, Israel (he_IL)</li>
<li>Hindi, India (hi_IN)</li>
</ul>
</td>
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<li>Croatian, Croatia (hr_HR)</li>
<li>Hungarian, Hungary (hu_HU)</li>
<li>Indonesian, Indonesia (id_ID)</li>
<li>Italian, Switzerland (it_CH)</li>
<li>Italian, Italy (it_IT)</li>
<li>Japanese (ja_JP)</li>
<li>Korean (ko_KR)</li>
<li>Lithuanian, Lithuania (lt_LT)</li>
<li>Latvian, Latvia (lv_LV)</li>
<li>Norwegian bokmål, Norway (nb_NO)</li>
<li>Dutch, Belgium (nl_BE)</li>
<li>Dutch, Netherlands (nl_NL)</li>
<li>Polish (pl_PL)</li>
<li>Portuguese, Brazil (pt_BR)</li>
<li>Portuguese, Portugal (pt_PT)</li>
<li>Romanian, Romania (ro_RO)</li>
<li>Russian (ru_RU)</li></li>
<li>Slovak, Slovakia (sk_SK)</li>
<li>Slovenian, Slovenia (sl_SI)</li>
<li>Serbian (sr_RS)</li>
<li>Swedish, Sweden (sv_SE)</li>
<li>Thai, Thailand (th_TH)</li>
<li>Tagalog, Philippines (tl_PH)</li>
<li>Turkish, Turkey (tr_TR)</li>
<li>Ukrainian, Ukraine (uk_UA)</li>
<li>Vietnamese, Vietnam (vi_VN)</li>
<li>Chinese, PRC (zh_CN)</li>
<li>Chinese, Taiwan (zh_TW)</li>
</td>
</tr>
</table>

<p class="note"><strong>Note:</strong> The Android platform may support more
locales than are included in the SDK system image. All of the supported locales
are available in the <a href="http://source.android.com/">Android Open Source
Project</a>.</p>

<h2 id="skins">Emulator Skins</h2>

<p>The downloadable platform includes the following emulator skin:</p>

<ul>
  <li>
    WXGA (1280x800, medium density, xlarge screen)
  </li>
</ul>

<p>For more information about how to develop an application that displays
and functions properly on all Android-powered devices, see <a
href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
Screens</a>.</p>