blob: 6896f523cc4fa8765b31cb2ef83c10ad0b95c656 [file] [log] [blame]
Scott Main7fb538c2011-01-19 21:11:50 -08001page.title=Android 3.0 Platform
2@jd:body
3
4<div id="qv-wrapper">
5<div id="qv">
6
7<h2>In this document</h2>
8<ol>
9 <li><a href="#api">API Overview</a></li>
10 <li><a href="#api-level">API Level</a></li>
11 <li><a href="#apps">Built-in Applications</a></li>
12 <li><a href="#locs">Locales</a></li>
13 <li><a href="#skins">Emulator Skins</a></li>
14</ol>
15
16<h2>Reference</h2>
17<ol>
18<li><a
19href="{@docRoot}sdk/api_diff/honeycomb/changes.html">API
20Differences Report &raquo;</a> </li>
21</ol>
22
23<h2>See Also</h2>
24<ol>
25 <li><a href="{@docRoot}sdk/preview/start.html">Getting Started</a></li>
26</ol>
27
28</div>
29</div>
30
31</p>API Level: <b>Honeycomb</b></p>
32
33<p>For developers, the Android 3.0 preview is available as a downloadable component for the
34Android SDK. The downloadable platform includes an Android library and system image, as well as a
35set of emulator skins and more. The downloadable platform includes no external libraries.</p>
36
37
38
39
40<h2 id="#api">API Overview</h2>
41
42<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
43including new features and changes in the framework API since the previous version.</p>
44
45
46
47
48<h3>Fragments</h3>
49
50<p>A fragment is a new framework component that allows you to separate distinct elements of an
51activity into self-contained modules that define their own UI and lifecycle. To create a
52fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
53callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
54fragments in a single activity to build a multi-pane UI in which each
55pane manages its own lifecycle and user inputs.</p>
56
57<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
58for the activity, such as to manage the progress of a download that occurs only while the
59activity is running.</p>
60
61<p>Additionally:</p>
62
63<ul>
64 <li>Fragments are self-contained and can be reused in multiple activities</li>
65 <li>Fragments can be added, removed, replaced and animated inside the activity</li>
66 <li>Fragment can be added to a back stack managed by the activity, preserving the state of
67fragments as they are changed and allowing the user to navigate backward through the different
68states</li>
69 <li>By <a
70href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
71alternative resources</a>, you can mix and match fragments, based
72on the screen size and orientation</li>
73 <li>Fragments have direct access to their container activity and can contribute items to the
74activity's Action Bar (discussed next)</li>
75</ul>
76
77<p>To manage the fragments in your activity, you must use the {@link
78android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
79as finding fragments in the activity and popping fragments off the back stack to restore them
80after they've been removed or hidden.</p>
81
82<p>To perform transactions, such as add or remove fragments, you must create a {@link
83android.app.FragmentTransaction}. You can then call methods such as {@link
84android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
85remove()}, {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
86the changes you want to perform for the transaction, you must call {@link
87android.app.FragmentTransaction#commit commit()} and the system will apply the transaction to
88the activity.</p>
89
90<p>For more information about using fragments in your application, read the <a
91href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
92
93
94
95
96<h3>Action Bar</h3>
97
98<p>The Action Bar is a replacement for the traditional title bar at the top of the activity
99window. It includes the application logo in the left corner and also replaces the previous Options
100Menu UI with a drop-down list for the menu items. Additionally, the Action Bar allows you
101to:</p></p>
102
103<ul>
104 <li>Include select menu items directly in the Action Bar&mdash;as "action
105items"&mdash;for quick access to global actions.
106 <p>In your XML declaration for the menu item, include the attribute, {@code
107android:showAsAction} with a value of {@code "ifRoom"}. When there's enough room in the
108Action Bar, the menu item appears directly in the bar. Otherwise, it is placed in the
109overflow menu, revealed by the icon on the right side of the Action Bar.</p></li>
110 <li>Add interactive widgets ("action views"), such as a search box.
111 <p>In your XML, include the attribute, {@code android:actionViewLayout} with a layout
112resource for the action view, or {@code android:actionViewClass} with the class name of the
113widget. Like action items, an action view appears only when there's room for it in the Action
114Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular
115menu item (for example, an item can provide a {@link android.widget.SearchView} as an action
116view, but when in the overflow menu, selecting the item will activate the search dialog).</p>
117 <p></p></li>
118 <li>Add an action to the application logo when tapped and replace it with a custom logo
119 <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
120which is delivered to your activity's {@link android.app.Activity#onOptionsItemSelected
121onOptionsItemSelected()} callback when tapped. Simply respond to this ID in your callback
122method to perform an action such as go to your application's "home" activity.</p>
123 <p>If your activity does not respond to the icon action, you should hide it by calling {@link
124android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)}.</p>
125 <p>By default, this is true, so the icon will visually respond when pressed, even if you don't
126respond. Thus, you should remove the icon if you don't respond to it.</p></li>
127 <li>Add breadcrumbs for navigating backward through fragments</li>
128 <li>Add built in tabs and a drop-down list for navigation</li>
129 <li>Customize the Action Bar themes and custom backgrounds</li>
130</ul>
131
132<p>The Action Bar is standard for all applications that set either the <a
133href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
134android:minSdkVersion}</a> or <a
135href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
136android:targetSdkVersion}</a> to {@code "Honeycomb"}. (The "Honeycomb" API Level is provisional
137and effective only while using the preview SDK&mdash;you must change it to the official API
138Level when the final SDK becomes available.)</p>
139
140<p>For more information, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
141Bar</a> developer guide.</p>
142
143
144
145
146<h3>System clipboard</h3>
147
148<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
149clipboard. Clipped data can be plain text, a URI, or an intent.</p>
150
151<p>By providing the system access to your data in a content provider, the user can copy complex
152content (such as an image or data structure) from your application and paste it into another
153application that supports that type of content.</p>
154
155<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
156by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
157
158<p>To create an item to attach to the clipboard, you need to create a new {@link
159android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
160objects, each describing a single entity. To create a {@link android.content.ClipData} object with
161just one {@link android.content.ClipData.Item}, you can use one of the helper methods such as,
162{@link android.content.ClipData#newPlainText newPlainText()}, {@link
163android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
164newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
165appropriate {@link android.content.ClipData.Item}.</p>
166
167<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
168android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
169android.content.ClipboardManager}.</p>
170
171<p>You can then acquire ("paste") a file from the clipboard by calling {@link
172android.content.ClipboardManager#getPrimaryClip()} on the {@link
173android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
174be more complicated and you need to be sure you can actually handle the data type.</p>
175
176<p>For more information, see the {@link android.content.ClipData} class reference. You can also see
177an example implementation of copy and paste in the <a
178href="{@docRoot}resources/samples/NotePad/index.html">NotePad</a> sample application.</p>
179
180
181
182
183<h3>Drag and drop</h3>
184
185<p>New APIs now facilitate the ability for your application to implement drag and drop
186functionality in the UI.</p>
187
188<p>To drag a {@link android.view.View} in your activity, call {@link android.view.View#startDrag
189startDrag()} on the object, providing a {@link android.content.ClipData} object that represents the
190information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow" that
191the user sees while dragging, and an {@link java.lang.Object} that can share information about the
192drag object with views that may receive the object. However, </p>
193
194<p>To accept a drag object (receive the "drop") in a
195{@link android.view.View}, register the view with an {@link android.view.View.OnDragListener} by
196calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
197the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
198android.view.View.OnDragListener}, which receives a {@link android.view.DragEvent} describing
199the type of event has occurred (such as "drag started", "drag ended", and "drop"). The receiving
200view can inquire the event type delivered to {@link
201android.view.View#onDragEvent onDragEvent()} by calling {@link
202android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
203
204<p>Although a drag event may carry a {@link android.content.ClipData} object, drag and drop does
205not depend on the clipboard. The data being dragged is sent to the system as {@link
206android.content.ClipData} and the system sends it to {@link android.view.View} objects in the
207{@link android.view.DragEvent}. A drag and drop operation should never put the dragged data on the
208clipboard.</p>
209
210
211
212<h3>Multiple-choice selection for ListView and GridView</h3>
213
214<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
215android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
216from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
217
218<p>To enable multiple-choice selection, call {@link
219android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
220{@link android.widget.AbsListView.MultiChoiceModeListener} with {@link
221android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
222
223<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
224Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener}
225when items are selected by calling {@link
226android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
227onItemCheckedStateChanged()}.</p>
228
229<p>For an example of multiple-choice selection, see the <a
230href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.java</a>
231class in the API Demos sample application.</p>
232
233
234
235
236<h3>Content loaders</h3>
237
238<p>New framework APIs facilitate asynchronous loading of data using the {@link
239android.content.Loader} class. You can use it in combination with UI components such as views and
240fragments to dynamically load data from background threads. The {@link
241android.content.CursorLoader} subclass is specially designed to help do so for data queried from
242a {@link android.content.ContentResolver}.</p>
243
244
245
246<h3>Extended app widgets</h3>
247
248<p>App widgets can now be more interactive with scrolling list views, grid views, view flippers, and
249a new 3D stack widget.</p>
250
251<p>Android 3.0 supports several new widget classes for App Widgets, including:</p>
252<ul>
253 <li>{@link android.widget.GridView}</li>
254 <li>{@link android.widget.ListView}</li>
255 <li>{@link android.widget.StackView}</li>
256 <li>{@link android.widget.ViewFlipper}</li>
257 <li>{@link android.widget.AdapterViewFlipper}</li>
258</ul>
259
260<p>You can use the new {@link android.widget.RemoteViewsService} to populate the new remote
261collection views ({@link android.widget.GridView}, {@link android.widget.ListView}, and {@link
262android.widget.StackView}).</p>
263
264<p>You can also use two new {@link android.appwidget.AppWidgetProviderInfo} fields. The {@link
265android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
266app widget subview, which is auto-advanced by the app widget’s host. The
267{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
268App Widget looks like and is shown to the user from the widget picker. If this field is not
269supplied, the app widget's icon is used for the preview.</p>
270
271<p>Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools. The
272tool lets you take a screenshot of your app widget, which you can use to populate the customization
273tray.</p>
274
275
276
277
278
279<h3>Extended status bar notifications</h3>
280
281<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
282bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
283control the notification properties. New features include:</p>
284<ul>
285 <li>Support for a large icon in the notification. This is usually for
286social applications to show the contact photo of the person who is the source of the
287notification or for media apps to show an album thumbnail. Set using {@link
288android.app.Notification.Builder#setLargeIcon setLargeIcon()}.</li>
289 <li>Support for custom layouts in the status bar ticker, using {@link
290android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
291 <li>Support for custom notification layouts to include buttons with {@link
292android.app.PendingIntent}s, for more interactive notification widgets
293(such as to control ongoing music in the background).</li>
294</ul>
295
296
297
298
299<h3>New animation framework</h3>
300
301<p>An all new flexible animation framework that allows you to animate the properties of any object
302(View, Drawable, Fragment, Object, anything). It allows you to define many aspects of an animation,
303such as:</p>
304<ul>
305 <li>Duration</li>
306 <li>Repeat amount and behavior</li>
307 <li>Type of time interpolation</li>
308 <li>Animator sets to play animations together, sequentially, or after specified delays</li>
309 <li>Frame refresh delay</li>
310</ul>
311
312 <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
313color values, by default. To animate any other type of value, you tell the system how to calculate
314the values for that given type, by implementing the {@link android.animation.TypeEvaluator}
315interface.</p>
316
317<p>There are two animators that you can use to animate values of a property: {@link
318android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
319android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
320object or property that is animated as a result. It simply performs the calculations, and you must
321listen for the updates and process the data with your own logic. The {@link
322android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
323allows you to set the object and property to animate, so you do not have to listen for updates.</p>
324
325<p>For more information, see the <a
326href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
327
328
329
330
331
332<h3>New widgets</h3>
333
334<ul>
335
336<li>{@link android.widget.AdapterViewAnimator}
337<p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
338between its views.</p></li>
339
340<li>{@link android.widget.AdapterViewFlipper}
341<p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
342been added to it. Only one child is shown at a time. If requested, it can automatically flip between
343each child at a regular interval.</p></li>
344
345<li>{@link android.widget.CalendarView}
346<p>Allows users to select dates from a calendar and you can configure the range of dates
347available. A user can select a date by tapping on it and can scroll and fling
348the calendar to a desired date.</p></li>
349
350<li>{@link android.widget.ListPopupWindow}
351<p>Anchors itself to a host view and displays a list of choices, such as for a list of
352suggestions when typing into an {@link android.widget.EditText} view.</p></li>
353
354<li>{@link android.widget.NumberPicker}
355<p>Enables the user to select a number from a predefined range. The widget presents an
356input field and up and down buttons for selecting a number. Touching the input field shows a
357scroll wheel that allows the user to scroll through values or touch again to directly edit the
358current value. It also allows you to map from positions to strings, so that
359the corresponding string is displayed instead of the position index.</p></li>
360
361<li>{@link android.widget.PopupMenu}
362<p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The popup
363appears below the anchor view if there is room, or above it if there is not. If the IME (soft
364keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
365
366<li>{@link android.widget.SearchView}
367<p>Provides a search box that works in conjunction with a search provider (in the same manner as
368the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>). It
369also displays recent query suggestions or custom suggestions as configured by the search
370provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
371
372<li>{@link android.widget.StackView}
373<p>A view that displays its children in a 3D stack and allows users to discretely swipe through the
374children.</p></li>
375
376</ul>
377
378
379
380
381
382<h3>Redesigned widgets</h3>
383
384<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types
385of content to their applications. The new UI widgets are redesigned for use on larger screens such
386as tablets and incorporate the new holographic UI theme. Several new widget types are available,
387including a 3D stack, search box, a date/time picker, number picker, stack, calendar View etc.
388SearchView, PopupMenu, and others. Most of the redesigned widgets can now be used as remote views in
389homescreen widgets. Applications written for earlier versions can inherit the new widget designs and
390themes.</p>
391
392
393
394
395<h3>Holographic themes</h3>
396
397<p>The standard system widgets and overall look have been redesigned for use on larger screens
398such as tablets and incorporate the new holographic UI theme. These style changes are applied
399using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
400Any application that targets the Android 3.0 platform inherit the holographic theme by default.
401However, if your application also applies its own styles, then it will override the holographic
402theme, unless you update your styles to inherit them.</p>
403
404<p>To apply the holographic theme to individual activities or to inherit them in your own theme
405definitions, you can use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
406themes.</p>
407
408
409
410<h3>Bluetooth A2DP and headset APIs</h3>
411
412<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
413headset profile devices. You can initialize the respective {@link
414android.bluetooth.BluetoothProfile} by calling {@link
415android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
416android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
417profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
418callbacks when the client is connected or disconnected.</p>
419
420
421<!--
422<h3>WebKit</h3>
423<h3>JSON (utilities)</h3>
424 -->
425
426
427<h3>Graphics</h3>
428
429<ul>
430 <li><h4>Hardware accelerated 2D graphics</h4>
431
432<p>You can now enable the OpenGL renderer for your application by setting {@code
433android:hardwareAccelerated="true"} in your manifest element's <a
434href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
435element or for individual <a
436href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
437elements.</p>
438
439<p>This flag helps applications by making them draw faster. This results in smoother animations,
440smoother scrolling, and overall better performance and response to user interaction.</p></li>
441
442 <li><h4>Renderscript 3D graphics engine</h4>
443
444<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
445as a special, platform-independent shader language for maximum performance. Using Renderscript, you
446can accelerate graphics operations and data processing. Renderscript is an ideal way to create
447high-performance 3D effects for applications, wallpapers, carousels, and more.</p></li>
448</ul>
449
450
451
452
453
454<h3>Media</h3>
455
456
457<ul>
458 <li><h4>Camcorder profiles</h4>
459
460<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
461quality profiles, such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
462android.media.CamcorderProfile#QUALITY_720P}, {@link
463android.media.CamcorderProfile#QUALITY_CIF}, and more, to determine the camcorder quality
464profiles.</p></li>
465
466 <li><h4>Time lapse video mode</h4>
467
468<p>Camcorder APIs now support the ability to record time lapse video. The {@link
469android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
470should be captured.</p></li>
471
472 <li><h4>Digital media file transfer</h4>
473
474<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
475which lets users easily transfer any type of media files between devices and to a host computer.
476Developers can take advantage of this to create applications that let users create or manage files
477that they may want to transfer across devices.</p></li>
478
479 <li><h4>Digital Media File Transfer</h4>
480
481<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
482which lets users easily transfer any type of media files between devices and to a host computer.
483Developers can build on this support, creating applications that let users create or manage rich
484media files that they may want to transfer or share across devices. </p></li>
485
486 <li><h4>Digital rights management (DRM)</h4>
487
488<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
489rights. It's implemented in two architectural layers:</p>
490<ul>
491 <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
492standard applications.</li>
493 <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
494plug-ins to handle rights management and decryption for various DRM schemes.</li>
495</ul>
496
497<p>For application developers, the framework offers an abstract, unified API that simplifies the
498management of protected content. The API hides the complexity of DRM operations and allows a
499consistent operation mode for both protected and unprotected content, and across a variety of DRM
500schemes.</p>
501
502<p>For device manufacturers, content owners, and Internet digital media providers the DRM
503framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
504Android system, for secure enforcement of content protection.</p>
505
506<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
507rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>
508
509<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>
510
511</ul>
512
513
514
515
516
517
518
519
520<h2 id="api-level">API Level</h2>
521
522<p>The Android 3.0 platform delivers an updated version of
523the framework API. Because this is a preview of the Android 3.0 API, it uses a provisional API
524level of "Honeycomb", instead of an integer identifier, which will be provided when the final SDK
525is made available and all APIs are final.</p>
526
527<p>To use APIs introduced in Android 3.0 in your application, you need compile the application
528against the Android library that is provided in the Android 3.0 preview SDK platform and you must
529declare this API Level in your manifest as <code>android:minSdkVersion="Honeycomb"</code>, in the
530<code>&lt;uses-sdk&gt;</code> element in the application's manifest.</p>
531
532<p>For more information about using this provisional API Level and setting up your environment
533to use the preview SDK, please see the <a href="{@docRoot}sdk/preview/start.html">Getting
534Started</a> document.</p>
535
536
537
538
539<h2 id="apps">Built-in Applications</h2>
540
541<p>The system image included in the downloadable platform provides these
542built-in applications:</p>
543
544<table style="border:0;padding-bottom:0;margin-bottom:0;">
545<tr>
546<td style="border:0;padding-bottom:0;margin-bottom:0;">
547<ul>
548<li>Browser</li>
549<li>Calculator</li>
550<li>Camera</li>
551<li>Clock</li>
552<li>Contacts</li>
553<li>Custom Locale</li>
554<li>Dev Tools</li>
555<li>Downloads</li>
556<li>Email</li>
557</ul>
558</td>
559<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
560<ul>
561<li>Gallery</li>
562<li>Music</li>
563<li>Search</li>
564<li>Settings</li>
565<li>Spare Parts (developer app)</li>
566<li>Speech Recorder</li>
567</ul>
568</td>
569</tr>
570</table>
571
572
573<h2 id="locs" style="margin-top:.75em;">Locales</h2>
574
575<p>The system image included in the downloadable SDK platform provides a variety of
576built-in locales. In some cases, region-specific strings are available for the
577locales. In other cases, a default version of the language is used. The
578languages that are available in the Android 3.0 system
579image are listed below (with <em>language</em>_<em>country/region</em> locale
580descriptor).</p>
581
582<table style="border:0;padding-bottom:0;margin-bottom:0;">
583<tr>
584<td style="border:0;padding-bottom:0;margin-bottom:0;">
585<ul>
586<li>Arabic, Egypt (ar_EG)</li>
587<li>Arabic, Israel (ar_IL)</li>
588<li>Bulgarian, Bulgaria (bg_BG)</li>
589<li>Catalan, Spain (ca_ES)</li>
590<li>Czech, Czech Republic (cs_CZ)</li>
591<li>Danish, Denmark(da_DK)</li>
592<li>German, Austria (de_AT)</li>
593<li>German, Switzerland (de_CH)</li>
594<li>German, Germany (de_DE)</li>
595<li>German, Liechtenstein (de_LI)</li>
596<li>Greek, Greece (el_GR)</li>
597<li>English, Australia (en_AU)</li>
598<li>English, Canada (en_CA)</li>
599<li>English, Britain (en_GB)</li>
600<li>English, Ireland (en_IE)</li>
601<li>English, India (en_IN)</li>
602<li>English, New Zealand (en_NZ)</li>
603<li>English, Singapore(en_SG)</li>
604<li>English, US (en_US)</li>
605<li>English, Zimbabwe (en_ZA)</li>
606<li>Spanish (es_ES)</li>
607<li>Spanish, US (es_US)</li>
608<li>Finnish, Finland (fi_FI)</li>
609<li>French, Belgium (fr_BE)</li>
610<li>French, Canada (fr_CA)</li>
611<li>French, Switzerland (fr_CH)</li>
612<li>French, France (fr_FR)</li>
613<li>Hebrew, Israel (he_IL)</li>
614<li>Hindi, India (hi_IN)</li>
615</ul>
616</td>
617<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
618<li>Croatian, Croatia (hr_HR)</li>
619<li>Hungarian, Hungary (hu_HU)</li>
620<li>Indonesian, Indonesia (id_ID)</li>
621<li>Italian, Switzerland (it_CH)</li>
622<li>Italian, Italy (it_IT)</li>
623<li>Japanese (ja_JP)</li>
624<li>Korean (ko_KR)</li>
625<li>Lithuanian, Lithuania (lt_LT)</li>
626<li>Latvian, Latvia (lv_LV)</li>
627<li>Norwegian bokmål, Norway (nb_NO)</li>
628<li>Dutch, Belgium (nl_BE)</li>
629<li>Dutch, Netherlands (nl_NL)</li>
630<li>Polish (pl_PL)</li>
631<li>Portuguese, Brazil (pt_BR)</li>
632<li>Portuguese, Portugal (pt_PT)</li>
633<li>Romanian, Romania (ro_RO)</li>
634<li>Russian (ru_RU)</li></li>
635<li>Slovak, Slovakia (sk_SK)</li>
636<li>Slovenian, Slovenia (sl_SI)</li>
637<li>Serbian (sr_RS)</li>
638<li>Swedish, Sweden (sv_SE)</li>
639<li>Thai, Thailand (th_TH)</li>
640<li>Tagalog, Philippines (tl_PH)</li>
641<li>Turkish, Turkey (tr_TR)</li>
642<li>Ukrainian, Ukraine (uk_UA)</li>
643<li>Vietnamese, Vietnam (vi_VN)</li>
644<li>Chinese, PRC (zh_CN)</li>
645<li>Chinese, Taiwan (zh_TW)</li>
646</td>
647</tr>
648</table>
649
650<p class="note"><strong>Note:</strong> The Android platform may support more
651locales than are included in the SDK system image. All of the supported locales
652are available in the <a href="http://source.android.com/">Android Open Source
653Project</a>.</p>
654
655<h2 id="skins">Emulator Skins</h2>
656
657<p>The downloadable platform includes the following emulator skin:</p>
658
659<ul>
660 <li>
661 WXGA (1280x800, medium density, xlarge screen)
662 </li>
663</ul>
664
665<p>For more information about how to develop an application that displays
666and functions properly on all Android-powered devices, see <a
667href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
668Screens</a>.</p>