blob: 2c8a7f018a60c822b1f194e671a64b8bed274cfb [file] [log] [blame]
Scott Maind41ff8e2011-01-21 14:51:33 -08001page.title=Android 3.0 Platform Preview
Scott Main7fb538c2011-01-19 21:11:50 -08002@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
Scott Maind41ff8e2011-01-21 14:51:33 -080031<p><em>API Level:</em> <b>Honeycomb</b></p>
Scott Main7fb538c2011-01-19 21:11:50 -080032
33<p>For developers, the Android 3.0 preview is available as a downloadable component for the
Scott Maind41ff8e2011-01-21 14:51:33 -080034Android SDK.</p>
35
36<p class="note"><strong>Note:</strong> Read the <a
37href="{@docRoot}sdk/preview/start.html">Getting Started</a> guide for important information
38about setting up your development environment and limitiations of the Android 3.0 preview.</p>
39
40
41
Scott Main7fb538c2011-01-19 21:11:50 -080042
43
44
45
46<h2 id="#api">API Overview</h2>
47
48<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
49including new features and changes in the framework API since the previous version.</p>
50
51
Scott Main7fb538c2011-01-19 21:11:50 -080052<h3>Fragments</h3>
53
54<p>A fragment is a new framework component that allows you to separate distinct elements of an
55activity into self-contained modules that define their own UI and lifecycle. To create a
56fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
57callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
58fragments in a single activity to build a multi-pane UI in which each
59pane manages its own lifecycle and user inputs.</p>
60
61<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
62for the activity, such as to manage the progress of a download that occurs only while the
63activity is running.</p>
64
65<p>Additionally:</p>
66
67<ul>
68 <li>Fragments are self-contained and can be reused in multiple activities</li>
69 <li>Fragments can be added, removed, replaced and animated inside the activity</li>
70 <li>Fragment can be added to a back stack managed by the activity, preserving the state of
71fragments as they are changed and allowing the user to navigate backward through the different
72states</li>
73 <li>By <a
74href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
Scott Main7afdaf02011-01-25 13:03:30 -080075alternative layouts</a>, you can mix and match fragments, based
Scott Main7fb538c2011-01-19 21:11:50 -080076on the screen size and orientation</li>
77 <li>Fragments have direct access to their container activity and can contribute items to the
78activity's Action Bar (discussed next)</li>
79</ul>
80
81<p>To manage the fragments in your activity, you must use the {@link
82android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
83as finding fragments in the activity and popping fragments off the back stack to restore them
84after they've been removed or hidden.</p>
85
Scott Main7afdaf02011-01-25 13:03:30 -080086<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
Scott Main7fb538c2011-01-19 21:11:50 -080087android.app.FragmentTransaction}. You can then call methods such as {@link
88android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
Scott Main7afdaf02011-01-25 13:03:30 -080089remove()}, or {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
Scott Main7fb538c2011-01-19 21:11:50 -080090the changes you want to perform for the transaction, you must call {@link
Scott Main7afdaf02011-01-25 13:03:30 -080091android.app.FragmentTransaction#commit commit()} and the system applies the fragment transaction to
Scott Main7fb538c2011-01-19 21:11:50 -080092the activity.</p>
93
Scott Main7afdaf02011-01-25 13:03:30 -080094<p>For more information about using fragments, read the <a
Scott Main7fb538c2011-01-19 21:11:50 -080095href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
96
97
98
99
100<h3>Action Bar</h3>
101
Scott Main7afdaf02011-01-25 13:03:30 -0800102<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
103It includes the application logo in the left corner and provides a new interface for items in the
104activity's Options Menu. Additionally, the Action Bar allows you to:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800105
106<ul>
107 <li>Include select menu items directly in the Action Bar&mdash;as "action
Scott Main7afdaf02011-01-25 13:03:30 -0800108items"&mdash;for quick access to global user actions.
Scott Main7fb538c2011-01-19 21:11:50 -0800109 <p>In your XML declaration for the menu item, include the attribute, {@code
110android:showAsAction} with a value of {@code "ifRoom"}. When there's enough room in the
Scott Main7afdaf02011-01-25 13:03:30 -0800111Action Bar, the menu item appears directly in the bar. Otherwise, the item is placed in the
Scott Main7fb538c2011-01-19 21:11:50 -0800112overflow menu, revealed by the icon on the right side of the Action Bar.</p></li>
Scott Main7afdaf02011-01-25 13:03:30 -0800113
114 <li>Add interactive widgets to the Action Bar&mdash;as "action views"&mdash;such as a search box.
115 <p>In the XML for the menu item that should behave as an action view, include the {@code
116android:actionViewLayout} attribute with a layout
117resource for the action view or {@code android:actionViewClass} with the class name of the
Scott Main7fb538c2011-01-19 21:11:50 -0800118widget. Like action items, an action view appears only when there's room for it in the Action
119Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular
120menu item (for example, an item can provide a {@link android.widget.SearchView} as an action
Scott Main7afdaf02011-01-25 13:03:30 -0800121view, but when in the overflow menu, selecting the item activates the search dialog).</p></li>
122
Scott Main7fb538c2011-01-19 21:11:50 -0800123 <li>Add an action to the application logo when tapped and replace it with a custom logo
124 <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
Scott Main7afdaf02011-01-25 13:03:30 -0800125which the system deliveres to your activity's {@link android.app.Activity#onOptionsItemSelected
Scott Main7fb538c2011-01-19 21:11:50 -0800126onOptionsItemSelected()} callback when tapped. Simply respond to this ID in your callback
127method to perform an action such as go to your application's "home" activity.</p>
Scott Main7afdaf02011-01-25 13:03:30 -0800128 <p>To replace the icon with a logo, </p></li>
129
Scott Main7fb538c2011-01-19 21:11:50 -0800130 <li>Add breadcrumbs for navigating backward through fragments</li>
131 <li>Add built in tabs and a drop-down list for navigation</li>
Scott Main7afdaf02011-01-25 13:03:30 -0800132 <li>Customize the Action Bar themes and custom backgrounds</li>
Scott Main7fb538c2011-01-19 21:11:50 -0800133</ul>
134
135<p>The Action Bar is standard for all applications that set either the <a
136href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
137android:minSdkVersion}</a> or <a
138href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
139android:targetSdkVersion}</a> to {@code "Honeycomb"}. (The "Honeycomb" API Level is provisional
140and effective only while using the preview SDK&mdash;you must change it to the official API
Scott Main7afdaf02011-01-25 13:03:30 -0800141Level when the final SDK becomes available&mdash;see <a
142href="{@docRoot}sdk/preview/start.html">Getting Started</a> for more information.)</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800143
Scott Main7afdaf02011-01-25 13:03:30 -0800144<p>For more information about the Action Bar, read the <a
145href="{@docRoot}guide/topics/ui/actionbar.html">Action
Scott Main7fb538c2011-01-19 21:11:50 -0800146Bar</a> developer guide.</p>
147
148
149
150
151<h3>System clipboard</h3>
152
153<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
154clipboard. Clipped data can be plain text, a URI, or an intent.</p>
155
156<p>By providing the system access to your data in a content provider, the user can copy complex
157content (such as an image or data structure) from your application and paste it into another
158application that supports that type of content.</p>
159
160<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
161by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
162
Scott Main7afdaf02011-01-25 13:03:30 -0800163<p>To create an item to attach to the clipboard ("copy"), you need to create a new {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800164android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
165objects, each describing a single entity. To create a {@link android.content.ClipData} object with
Scott Main7afdaf02011-01-25 13:03:30 -0800166just one {@link android.content.ClipData.Item}, you can use one of the helper methods, such as
Scott Main7fb538c2011-01-19 21:11:50 -0800167{@link android.content.ClipData#newPlainText newPlainText()}, {@link
168android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
169newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
170appropriate {@link android.content.ClipData.Item}.</p>
171
172<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
173android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
174android.content.ClipboardManager}.</p>
175
176<p>You can then acquire ("paste") a file from the clipboard by calling {@link
177android.content.ClipboardManager#getPrimaryClip()} on the {@link
178android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
179be more complicated and you need to be sure you can actually handle the data type.</p>
180
181<p>For more information, see the {@link android.content.ClipData} class reference. You can also see
182an example implementation of copy and paste in the <a
183href="{@docRoot}resources/samples/NotePad/index.html">NotePad</a> sample application.</p>
184
185
186
187
188<h3>Drag and drop</h3>
189
Scott Main7afdaf02011-01-25 13:03:30 -0800190<p>New APIs facilitate the ability for your application to implement drag and drop
Scott Main7fb538c2011-01-19 21:11:50 -0800191functionality in the UI.</p>
192
Scott Maind41ff8e2011-01-21 14:51:33 -0800193<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
194on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
195the information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
196that the user sees while dragging, and an {@link java.lang.Object} that can share information about
197the drag object with views that may receive the object.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800198
199<p>To accept a drag object (receive the "drop") in a
Scott Main7afdaf02011-01-25 13:03:30 -0800200{@link android.view.View}, register the view with an {@link android.view.View.OnDragListener
201OnDragListener} by
Scott Main7fb538c2011-01-19 21:11:50 -0800202calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
203the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
Scott Main7afdaf02011-01-25 13:03:30 -0800204android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
205describing the
206type of event has occurred (such as "drag started", "drag ended", or "drop"). During a drag, the
207system repeatedly calls {@link
208android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to
209deliver a stream of events. The receiving view can
Scott Maind41ff8e2011-01-21 14:51:33 -0800210inquire the event type delivered to {@link android.view.View#onDragEvent onDragEvent()} by calling
211{@link android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800212
Scott Maind41ff8e2011-01-21 14:51:33 -0800213<p>Although a drag event may carry a {@link android.content.ClipData} object, this is not related
214to the system clipboard. The data being dragged is passed as a {@link
215android.content.ClipData} object to {@link android.view.View#startDrag startDrag()} and the system
216sends it to the receiving {@link android.view.View} in the {@link android.view.DragEvent} sent to
217{@link android.view.View.OnDragListener#onDrag onDrag()}. A drag and drop operation should never
218put the dragged data in the global system clipboard.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800219
220
221
Scott Maind41ff8e2011-01-21 14:51:33 -0800222<h3>App widgets</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800223
Scott Main7afdaf02011-01-25 13:03:30 -0800224<p>Android 3.0 supports several new widget classes for more interactive app widgets, including:
225{@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800226android.widget.GridView}, {@link android.widget.ListView}, {@link android.widget.StackView}, {@link
227android.widget.ViewFlipper}, and {@link android.widget.AdapterViewFlipper}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800228
Scott Main7afdaf02011-01-25 13:03:30 -0800229<p>You can also use the new {@link android.widget.RemoteViewsService} to populate
230collection views such as ({@link android.widget.GridView}, {@link android.widget.ListView}, and
231{@link android.widget.StackView}).</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800232
Scott Maind41ff8e2011-01-21 14:51:33 -0800233<p>{@link android.appwidget.AppWidgetProviderInfo} also supports two new fields: {@link
234android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
235android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800236android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
237app widget subview, which is auto-advanced by the app widget’s host. The
238{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
Scott Main7afdaf02011-01-25 13:03:30 -0800239app widget looks like and is shown to the user from the widget picker. If this field is not
Scott Main7fb538c2011-01-19 21:11:50 -0800240supplied, the app widget's icon is used for the preview.</p>
241
Scott Main7afdaf02011-01-25 13:03:30 -0800242<p>Android also provides a new widget preview tool ({@code WidgetPreview}), located in the SDK
243tools, to take a screenshot of your app widget, which you can use when specifying the {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800244android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800245
246
247
248
249
Scott Maind41ff8e2011-01-21 14:51:33 -0800250<h3>Status bar notifications</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800251
252<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
253bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
Scott Main7afdaf02011-01-25 13:03:30 -0800254control the notification properties.</p>
255<p>New features include:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800256<ul>
Scott Main7afdaf02011-01-25 13:03:30 -0800257 <li>Support for a large icon in the notification, using {@link
258android.app.Notification.Builder#setLargeIcon setLargeIcon()}. This is usually for
Scott Main7fb538c2011-01-19 21:11:50 -0800259social applications to show the contact photo of the person who is the source of the
Scott Main7afdaf02011-01-25 13:03:30 -0800260notification or for media apps to show an album thumbnail.</li>
Scott Main7fb538c2011-01-19 21:11:50 -0800261 <li>Support for custom layouts in the status bar ticker, using {@link
262android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
263 <li>Support for custom notification layouts to include buttons with {@link
264android.app.PendingIntent}s, for more interactive notification widgets
265(such as to control ongoing music in the background).</li>
266</ul>
267
268
269
270
Scott Maind41ff8e2011-01-21 14:51:33 -0800271<h3>Content loaders</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800272
Scott Maind41ff8e2011-01-21 14:51:33 -0800273<p>New framework APIs facilitate asynchronous loading of data using the {@link
274android.content.Loader} class. You can use it in combination with UI components such as views and
Scott Main7afdaf02011-01-25 13:03:30 -0800275fragments to dynamically load data from worker threads. The {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800276android.content.CursorLoader} subclass is specially designed to help do so for data queried from
277a {@link android.content.ContentResolver}.</p>
278
279
280
281
282
283<h3>Bluetooth A2DP and headset APIs</h3>
284
285<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
Scott Main7afdaf02011-01-25 13:03:30 -0800286headset profile devices. For example, applications can identify when a Bluetooth headset is
287connected for listening to music and notify the user as appropriate. Applications can also receive
288broadcasts for vendor specific AT commands and notify the user about the state of the connected
289device, such as when the connected device's battery is low.</p>
290
291<p>You can initialize the respective {@link android.bluetooth.BluetoothProfile} by calling {@link
Scott Maind41ff8e2011-01-21 14:51:33 -0800292android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
293android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
294profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
Scott Main7afdaf02011-01-25 13:03:30 -0800295callbacks when the Bluetooth client is connected or disconnected.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800296
297
298
299
300<h3>Animation framework</h3>
301
Scott Main7afdaf02011-01-25 13:03:30 -0800302<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
303(View, Drawable, Fragment, Object, or anything else). It allows you to define many aspects of an
304animation, such as:</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800305<ul>
306 <li>Duration</li>
307 <li>Repeat amount and behavior</li>
308 <li>Type of time interpolation</li>
309 <li>Animator sets to play animations together, sequentially, or after specified delays</li>
310 <li>Frame refresh delay</li>
311</ul>
312
313 <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
314color values, by default. To animate any other type of value, you tell the system how to calculate
315the values for that given type, by implementing the {@link android.animation.TypeEvaluator}
316interface.</p>
317
Scott Main7afdaf02011-01-25 13:03:30 -0800318<p>There are two animators you can use to animate values of a property: {@link
Scott Main7fb538c2011-01-19 21:11:50 -0800319android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
320android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
321object or property that is animated as a result. It simply performs the calculations, and you must
322listen for the updates and process the data with your own logic. The {@link
323android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
Scott Maind41ff8e2011-01-21 14:51:33 -0800324allows you to set the object and property to animate, and it handles all animation work.
325That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
326property of the object to change over time, and a set of values to apply to the property over
327time in order to animate it, then start the animation.</p>
328
329<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
Scott Main7afdaf02011-01-25 13:03:30 -0800330animations for changes you make to your activity layout. To enable transitions for part of the
331layout, create a {@link android.animation.LayoutTransition} object and set it on
Scott Maind41ff8e2011-01-21 14:51:33 -0800332any {@link android.view.ViewGroup} by calling {@link
333android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
334animations to run whenever items are added to or removed from the group. To specify custom
335animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
Scott Main7afdaf02011-01-25 13:03:30 -0800336android.animation.LayoutTransition} and provide a custom {@link android.animation.Animator},
Scott Maind41ff8e2011-01-21 14:51:33 -0800337such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
338discussed above.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800339
340<p>For more information, see the <a
341href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer guide.</p>
342
343
344
345
Scott Maind41ff8e2011-01-21 14:51:33 -0800346<h3>Extended UI framework</h3>
Scott Main7fb538c2011-01-19 21:11:50 -0800347
348<ul>
349
Scott Maind41ff8e2011-01-21 14:51:33 -0800350 <li><b>Multiple-choice selection for ListView and GridView</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800351
Scott Maind41ff8e2011-01-21 14:51:33 -0800352<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
353android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
354from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800355
Scott Maind41ff8e2011-01-21 14:51:33 -0800356<p>To enable multiple-choice selection, call {@link
357android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
358{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
359android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800360
Scott Maind41ff8e2011-01-21 14:51:33 -0800361<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
362Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
363MultiChoiceModeListener} when items are selected by calling {@link
364android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
365onItemCheckedStateChanged()}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800366
Scott Maind41ff8e2011-01-21 14:51:33 -0800367<p>For an example of multiple-choice selection, see the <a
368href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
369java</a>
370class in the API Demos sample application.</p>
371 </li>
Scott Main7fb538c2011-01-19 21:11:50 -0800372
Scott Maind41ff8e2011-01-21 14:51:33 -0800373
374 <li><b>New APIs to transform views</b>
375
376 <p>New APIs allow you to easily apply 2D and 3D transformations to {@link
377android.view.View}s in your activity layout, using a set of object properties that define the view's
378layout position, orientation, transparency and more.</p>
379 <p>New methods to set properties include: {@link android.view.View#setAlpha setAlpha()}, {@link
380android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
381android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
382android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
383android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
384setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
385setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800386
Scott Maind41ff8e2011-01-21 14:51:33 -0800387 <p>Some methods also have a corresponding XML attribute that you can specify in your layout
388file. Available attributes include: {@code translationX}, {@code translationY}, {@code rotation},
389{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
390{@code transformPivotY}, and {@code alpha}.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800391
Scott Maind41ff8e2011-01-21 14:51:33 -0800392 <p>Using some of these new properties in combination with the new animation framework (discussed
393previously), you can easily create some fancy animations to your views. For example, to rotate a
394view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
395android.view.View}, the "rotationY" property, and the values to use:</p>
396<pre>
397ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
398animator.setDuration(2000);
399animator.start();
400</pre>
401 </li>
Scott Main7fb538c2011-01-19 21:11:50 -0800402
Scott Maind41ff8e2011-01-21 14:51:33 -0800403
404 <li><b>New holographic themes</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800405
Scott Maind41ff8e2011-01-21 14:51:33 -0800406 <p>The standard system widgets and overall look have been redesigned for use on larger screens
Scott Main7afdaf02011-01-25 13:03:30 -0800407such as tablets and incorporate the new "holographic" UI theme. The system applies these styles
Scott Main7fb538c2011-01-19 21:11:50 -0800408using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
Scott Main7afdaf02011-01-25 13:03:30 -0800409Any application that targets the Android 3.0 platform inherits the holographic theme by default.
Scott Main7fb538c2011-01-19 21:11:50 -0800410However, if your application also applies its own styles, then it will override the holographic
Scott Main7afdaf02011-01-25 13:03:30 -0800411theme, unless you update your styles to inherit the holographic theme.</p>
Scott Main7fb538c2011-01-19 21:11:50 -0800412
413<p>To apply the holographic theme to individual activities or to inherit them in your own theme
Scott Main7afdaf02011-01-25 13:03:30 -0800414definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
Scott Main7fb538c2011-01-19 21:11:50 -0800415themes.</p>
Scott Maind41ff8e2011-01-21 14:51:33 -0800416 </li>
417
418
419 <li><b>New widgets</b>
420
421 <ul>
422 <li>{@link android.widget.AdapterViewAnimator}
423 <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
424 between its views.</p></li>
425
426 <li>{@link android.widget.AdapterViewFlipper}
427 <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
428 been added to it. Only one child is shown at a time. If requested, it can automatically flip
429 between
430 each child at a regular interval.</p></li>
431
432 <li>{@link android.widget.CalendarView}
433 <p>Allows users to select dates from a calendar and you can configure the range of dates
434 available. A user can select a date by tapping on it and can scroll and fling
435 the calendar to a desired date.</p></li>
436
437 <li>{@link android.widget.ListPopupWindow}
438 <p>Anchors itself to a host view and displays a list of choices, such as for a list of
439 suggestions when typing into an {@link android.widget.EditText} view.</p></li>
440
441 <li>{@link android.widget.NumberPicker}
442 <p>Enables the user to select a number from a predefined range. The widget presents an
443 input field and up and down buttons for selecting a number. Touching the input field shows a
444 scroll wheel that allows the user to scroll through values or touch again to directly edit the
445 current value. It also allows you to map from positions to strings, so that
446 the corresponding string is displayed instead of the position index.</p></li>
447
448 <li>{@link android.widget.PopupMenu}
449 <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
450 popup
451 appears below the anchor view if there is room, or above it if there is not. If the IME (soft
452 keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
453
454 <li>{@link android.widget.SearchView}
455 <p>Provides a search box that works in conjunction with a search provider (in the same manner as
456 the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>).
457It
458 also displays recent query suggestions or custom suggestions as configured by the search
459 provider. This widget is particularly useful for offering search in the Action Bar.</p></li>
460
461 <li>{@link android.widget.StackView}
462 <p>A view that displays its children in a 3D stack and allows users to discretely swipe through
463 the
464 children.</p></li>
465
466 </ul>
467 </li>
468
469</ul>
Scott Main7fb538c2011-01-19 21:11:50 -0800470
471
472
Scott Main7fb538c2011-01-19 21:11:50 -0800473
474<!--
475<h3>WebKit</h3>
476<h3>JSON (utilities)</h3>
477 -->
478
479
480<h3>Graphics</h3>
481
482<ul>
Scott Maind41ff8e2011-01-21 14:51:33 -0800483 <li><b>Hardware accelerated 2D graphics</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800484
485<p>You can now enable the OpenGL renderer for your application by setting {@code
486android:hardwareAccelerated="true"} in your manifest element's <a
487href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
488element or for individual <a
489href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
490elements.</p>
491
492<p>This flag helps applications by making them draw faster. This results in smoother animations,
493smoother scrolling, and overall better performance and response to user interaction.</p></li>
494
Scott Maind41ff8e2011-01-21 14:51:33 -0800495
496 <li><b>View support for hardware and software layers</b>
497
498 <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
499view be backed by either a hardware or software layer, specified by values {@link
500android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
501{@link android.view.View#setLayerType setLayerType()} or the <a
502href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
503attribute.</p>
504 <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
505FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
506pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
507acceleration is turned off, hardware layers behave exactly as software layers.</p>
508 <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
509software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
510avoided when the affected view tree updates often. Every update will require to re-render the
511software layer, which can potentially be slow.</p>
512 <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
513android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
514 </li>
515
516
517 <li><b>Renderscript 3D graphics engine</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800518
519<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
520as a special, platform-independent shader language for maximum performance. Using Renderscript, you
521can accelerate graphics operations and data processing. Renderscript is an ideal way to create
522high-performance 3D effects for applications, wallpapers, carousels, and more.</p></li>
523</ul>
524
525
526
527
Scott Main7fb538c2011-01-19 21:11:50 -0800528<h3>Media</h3>
529
530
531<ul>
Scott Main7fb538c2011-01-19 21:11:50 -0800532
Scott Main7afdaf02011-01-25 13:03:30 -0800533 <li><b>Time lapse video</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800534
535<p>Camcorder APIs now support the ability to record time lapse video. The {@link
536android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
537should be captured.</p></li>
538
Scott Main7afdaf02011-01-25 13:03:30 -0800539 <li><b>Texture support for image streams</b>
540
541<p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES
542texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your
543{@link android.hardware.Camera} instance, you can specify the {@link
544android.graphics.SurfaceTexture} upon which to draw video playback or preview frames from the
545camera.</p></li>
546
547 <li><b>HTTP Live streaming</b>
548
549<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
550streaming session. The media framework supports most of the HTTP Live streaming specification,
551including adaptive bit rate.</p></li>
552
553 <li><b>EXIF data</b>
554
555<p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure
556time.</p></li>
557
558 <li><b>Camcorder profiles</b>
559
560<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
561quality profiles (such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
562android.media.CamcorderProfile#QUALITY_720P}, {@link
563android.media.CamcorderProfile#QUALITY_CIF}, and others) allow you to determine camcorder
564quality options.</p></li>
565
Scott Maind41ff8e2011-01-21 14:51:33 -0800566 <li><b>Digital media file transfer</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800567
568<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
569which lets users easily transfer any type of media files between devices and to a host computer.
570Developers can build on this support, creating applications that let users create or manage rich
571media files that they may want to transfer or share across devices. </p></li>
572
Scott Maind41ff8e2011-01-21 14:51:33 -0800573 <li><b>Digital rights management (DRM)</b>
Scott Main7fb538c2011-01-19 21:11:50 -0800574
575<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
576rights. It's implemented in two architectural layers:</p>
577<ul>
578 <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
579standard applications.</li>
580 <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
581plug-ins to handle rights management and decryption for various DRM schemes.</li>
582</ul>
583
584<p>For application developers, the framework offers an abstract, unified API that simplifies the
585management of protected content. The API hides the complexity of DRM operations and allows a
586consistent operation mode for both protected and unprotected content, and across a variety of DRM
587schemes.</p>
588
589<p>For device manufacturers, content owners, and Internet digital media providers the DRM
590framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
591Android system, for secure enforcement of content protection.</p>
592
593<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
594rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>
595
596<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>
597
598</ul>
599
600
601
602
603
604
605
606
607<h2 id="api-level">API Level</h2>
608
609<p>The Android 3.0 platform delivers an updated version of
610the framework API. Because this is a preview of the Android 3.0 API, it uses a provisional API
611level of "Honeycomb", instead of an integer identifier, which will be provided when the final SDK
612is made available and all APIs are final.</p>
613
614<p>To use APIs introduced in Android 3.0 in your application, you need compile the application
615against the Android library that is provided in the Android 3.0 preview SDK platform and you must
616declare this API Level in your manifest as <code>android:minSdkVersion="Honeycomb"</code>, in the
617<code>&lt;uses-sdk&gt;</code> element in the application's manifest.</p>
618
619<p>For more information about using this provisional API Level and setting up your environment
620to use the preview SDK, please see the <a href="{@docRoot}sdk/preview/start.html">Getting
621Started</a> document.</p>
622
623
624
625
626<h2 id="apps">Built-in Applications</h2>
627
628<p>The system image included in the downloadable platform provides these
629built-in applications:</p>
630
631<table style="border:0;padding-bottom:0;margin-bottom:0;">
632<tr>
633<td style="border:0;padding-bottom:0;margin-bottom:0;">
634<ul>
635<li>Browser</li>
636<li>Calculator</li>
637<li>Camera</li>
638<li>Clock</li>
639<li>Contacts</li>
640<li>Custom Locale</li>
641<li>Dev Tools</li>
642<li>Downloads</li>
643<li>Email</li>
644</ul>
645</td>
646<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
647<ul>
648<li>Gallery</li>
649<li>Music</li>
650<li>Search</li>
651<li>Settings</li>
652<li>Spare Parts (developer app)</li>
653<li>Speech Recorder</li>
654</ul>
655</td>
656</tr>
657</table>
658
659
660<h2 id="locs" style="margin-top:.75em;">Locales</h2>
661
662<p>The system image included in the downloadable SDK platform provides a variety of
663built-in locales. In some cases, region-specific strings are available for the
664locales. In other cases, a default version of the language is used. The
665languages that are available in the Android 3.0 system
666image are listed below (with <em>language</em>_<em>country/region</em> locale
667descriptor).</p>
668
669<table style="border:0;padding-bottom:0;margin-bottom:0;">
670<tr>
671<td style="border:0;padding-bottom:0;margin-bottom:0;">
672<ul>
673<li>Arabic, Egypt (ar_EG)</li>
674<li>Arabic, Israel (ar_IL)</li>
675<li>Bulgarian, Bulgaria (bg_BG)</li>
676<li>Catalan, Spain (ca_ES)</li>
677<li>Czech, Czech Republic (cs_CZ)</li>
678<li>Danish, Denmark(da_DK)</li>
679<li>German, Austria (de_AT)</li>
680<li>German, Switzerland (de_CH)</li>
681<li>German, Germany (de_DE)</li>
682<li>German, Liechtenstein (de_LI)</li>
683<li>Greek, Greece (el_GR)</li>
684<li>English, Australia (en_AU)</li>
685<li>English, Canada (en_CA)</li>
686<li>English, Britain (en_GB)</li>
687<li>English, Ireland (en_IE)</li>
688<li>English, India (en_IN)</li>
689<li>English, New Zealand (en_NZ)</li>
690<li>English, Singapore(en_SG)</li>
691<li>English, US (en_US)</li>
692<li>English, Zimbabwe (en_ZA)</li>
693<li>Spanish (es_ES)</li>
694<li>Spanish, US (es_US)</li>
695<li>Finnish, Finland (fi_FI)</li>
696<li>French, Belgium (fr_BE)</li>
697<li>French, Canada (fr_CA)</li>
698<li>French, Switzerland (fr_CH)</li>
699<li>French, France (fr_FR)</li>
700<li>Hebrew, Israel (he_IL)</li>
701<li>Hindi, India (hi_IN)</li>
702</ul>
703</td>
704<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
705<li>Croatian, Croatia (hr_HR)</li>
706<li>Hungarian, Hungary (hu_HU)</li>
707<li>Indonesian, Indonesia (id_ID)</li>
708<li>Italian, Switzerland (it_CH)</li>
709<li>Italian, Italy (it_IT)</li>
710<li>Japanese (ja_JP)</li>
711<li>Korean (ko_KR)</li>
712<li>Lithuanian, Lithuania (lt_LT)</li>
713<li>Latvian, Latvia (lv_LV)</li>
714<li>Norwegian bokmål, Norway (nb_NO)</li>
715<li>Dutch, Belgium (nl_BE)</li>
716<li>Dutch, Netherlands (nl_NL)</li>
717<li>Polish (pl_PL)</li>
718<li>Portuguese, Brazil (pt_BR)</li>
719<li>Portuguese, Portugal (pt_PT)</li>
720<li>Romanian, Romania (ro_RO)</li>
721<li>Russian (ru_RU)</li></li>
722<li>Slovak, Slovakia (sk_SK)</li>
723<li>Slovenian, Slovenia (sl_SI)</li>
724<li>Serbian (sr_RS)</li>
725<li>Swedish, Sweden (sv_SE)</li>
726<li>Thai, Thailand (th_TH)</li>
727<li>Tagalog, Philippines (tl_PH)</li>
728<li>Turkish, Turkey (tr_TR)</li>
729<li>Ukrainian, Ukraine (uk_UA)</li>
730<li>Vietnamese, Vietnam (vi_VN)</li>
731<li>Chinese, PRC (zh_CN)</li>
732<li>Chinese, Taiwan (zh_TW)</li>
733</td>
734</tr>
735</table>
736
737<p class="note"><strong>Note:</strong> The Android platform may support more
738locales than are included in the SDK system image. All of the supported locales
739are available in the <a href="http://source.android.com/">Android Open Source
740Project</a>.</p>
741
742<h2 id="skins">Emulator Skins</h2>
743
744<p>The downloadable platform includes the following emulator skin:</p>
745
746<ul>
747 <li>
748 WXGA (1280x800, medium density, xlarge screen)
749 </li>
750</ul>
751
752<p>For more information about how to develop an application that displays
753and functions properly on all Android-powered devices, see <a
754href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
755Screens</a>.</p>