page.title=Android 3.0 Platform @jd:body
For developers, the Android 3.0 preview 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.
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.
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.
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.
Additionally:
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 them after they've been removed or hidden.
To perform transactions, such as add or remove fragments, 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()}, {@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 will apply the transaction to the activity.
For more information about using fragments in your application, read the Fragments developer guide.
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 also replaces the previous Options Menu UI with a drop-down list for the menu items. Additionally, the Action Bar allows you to:
In your XML declaration for the menu item, include the attribute, {@code android:showAsAction} with a value of {@code "ifRoom"}. When there's enough room in the Action Bar, the menu item appears directly in the bar. Otherwise, it is placed in the overflow menu, revealed by the icon on the right side of the Action Bar.
In your XML, include the attribute, {@code android:actionViewLayout} with a layout resource for the action view, or {@code android:actionViewClass} with the class name of the widget. Like action items, an action view appears only when there's room for it in the Action Bar. If there's not enough room, it is placed in the overflow menu and behaves like a regular menu item (for example, an item can provide a {@link android.widget.SearchView} as an action view, but when in the overflow menu, selecting the item will activate the search dialog).
The application logo is automatically assigned the {@code android.R.id.home} ID, which is delivered to your activity's {@link android.app.Activity#onOptionsItemSelected onOptionsItemSelected()} callback when tapped. Simply respond to this ID in your callback method to perform an action such as go to your application's "home" activity.
If your activity does not respond to the icon action, you should hide it by calling {@link android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)}.
By default, this is true, so the icon will visually respond when pressed, even if you don't respond. Thus, you should remove the icon if you don't respond to it.
The Action Bar is standard for all applications that set either the {@code android:minSdkVersion} or {@code android:targetSdkVersion} to {@code "Honeycomb"}. (The "Honeycomb" API Level is provisional and effective only while using the preview SDK—you must change it to the official API Level when the final SDK becomes available.)
For more information, read the Action Bar developer guide.
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.
By providing the system access to your data in 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.
To start using the clipboard, get the global {@link android.content.ClipboardManager} object by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.
To create an item to attach 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 with 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 appropriate {@link android.content.ClipData.Item}.
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}.
You can then acquire ("paste") a file from the clipboard by calling {@link android.content.ClipboardManager#getPrimaryClip()} on the {@link android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can be more complicated and you need to be sure you can actually handle the data type.
For more information, see the {@link android.content.ClipData} class reference. You can also see an example implementation of copy and paste in the NotePad sample application.
New APIs now facilitate the ability for your application to implement drag and drop functionality in the UI.
To drag a {@link android.view.View} in your activity, call {@link android.view.View#startDrag startDrag()} on the object, providing a {@link android.content.ClipData} object that represents the information to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow" that the user sees while dragging, and an {@link java.lang.Object} that can share information about the drag object with views that may receive the object. However,
To accept a drag object (receive the "drop") in a {@link android.view.View}, register the view with an {@link android.view.View.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}, which receives a {@link android.view.DragEvent} describing the type of event has occurred (such as "drag started", "drag ended", and "drop"). 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}.
Although a drag event may carry a {@link android.content.ClipData} object, drag and drop does not depend on the clipboard. The data being dragged is sent to the system as {@link android.content.ClipData} and the system sends it to {@link android.view.View} objects in the {@link android.view.DragEvent}. A drag and drop operation should never put the dragged data on the clipboard.
New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items from a {@link android.widget.ListView} and {@link android.widget.GridView}.
To enable multiple-choice selection, call {@link android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a {@link android.widget.AbsListView.MultiChoiceModeListener} with {@link android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.
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} when items are selected by calling {@link android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged onItemCheckedStateChanged()}.
For an example of multiple-choice selection, see the List15.java class in the API Demos sample application.
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 background threads. The {@link android.content.CursorLoader} subclass is specially designed to help do so for data queried from a {@link android.content.ContentResolver}.
App widgets can now be more interactive with scrolling list views, grid views, view flippers, and a new 3D stack widget.
Android 3.0 supports several new widget classes for App Widgets, including:
You can use the new {@link android.widget.RemoteViewsService} to populate the new remote collection views ({@link android.widget.GridView}, {@link android.widget.ListView}, and {@link android.widget.StackView}).
You can also use two new {@link android.appwidget.AppWidgetProviderInfo} fields. The {@link android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the app widget subview, which is 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.
Android also provides a new widget preview tool (WidgetPreview), located in the SDK tools. The tool lets you take a screenshot of your app widget, which you can use to populate the customization tray.
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 control the notification properties. New features include:
An all new flexible animation framework that allows you to animate the properties of any object (View, Drawable, Fragment, Object, anything). It allows you to define many aspects of an animation, such as:
You can define these animation aspects, and others, for an object's int, float, and hexadecimal color values, by default. 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.
There are two animators that you can use to animate 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, so you do not have to listen for updates.
For more information, see the Animation developer guide.
Base class for an {@link android.widget.AdapterView} that performs animations when switching between its views.
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.
Allows users to select dates from a calendar and you can configure the range of dates available. A user can select a date by tapping on it and can scroll and fling the calendar to a desired date.
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.
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 shows a scroll wheel that allows the user to scroll through values or touch again to directly edit the current value. It also allows you to map from positions to strings, so that the corresponding string is displayed instead of the position index.
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 it until it is touched.
Provides a search box that works in conjunction with a search provider (in the same manner as the traditional search dialog). It also displays recent query suggestions or custom suggestions as configured by the search provider. This widget is particularly useful for offering search in the Action Bar.
A view that displays its children in a 3D stack and allows users to discretely swipe through the children.
Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types of content to their applications. The new UI widgets are redesigned for use on larger screens such as tablets and incorporate the new holographic UI theme. Several new widget types are available, including a 3D stack, search box, a date/time picker, number picker, stack, calendar View etc. SearchView, PopupMenu, and others. Most of the redesigned widgets can now be used as remote views in homescreen widgets. Applications written for earlier versions can inherit the new widget designs and themes.
The standard system widgets and overall look have been redesigned for use on larger screens such as tablets and incorporate the new holographic UI theme. These style changes are applied using the standard style and theme system. Any application that targets the Android 3.0 platform inherit the holographic theme by default. However, if your application also applies its own styles, then it will override the holographic theme, unless you update your styles to inherit them.
To apply the holographic theme to individual activities or to inherit them in your own theme definitions, you can use one of several new {@link android.R.style#Theme_Holo Theme.Holo} themes.
Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and headset profile devices. 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 client is connected or disconnected.
You can now enable the OpenGL renderer for your application by setting {@code android:hardwareAccelerated="true"} in your manifest element's {@code <application>} element or for individual {@code <activity>} elements.
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.
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.
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 more, to determine the camcorder quality profiles.
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.
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 take advantage of this to create applications that let users create or manage files that they may want to transfer across devices.
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.
New extensible digital rights management (DRM) framework for checking and enforcing digital rights. It's implemented in two architectural layers:
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.
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.
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.
You can find all of the DRM APIs in the {@link android.drm} package.
The Android 3.0 platform delivers an updated version of the framework API. Because this is a preview of the Android 3.0 API, it uses a provisional API level of "Honeycomb", instead of an integer identifier, which will be provided when the final SDK is made available and all APIs are final.
To use APIs introduced in Android 3.0 in your application, you need compile the application
against the Android library that is provided in the Android 3.0 preview SDK platform and you must
declare this API Level in your manifest as android:minSdkVersion="Honeycomb"
, in the
<uses-sdk>
element in the application's manifest.
For more information about using this provisional API Level and setting up your environment to use the preview SDK, please see the Getting Started document.
The system image included in the downloadable platform provides these built-in applications:
|
|
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 language_country/region locale descriptor).
|
|
Note: The Android platform may support more locales than are included in the SDK system image. All of the supported locales are available in the Android Open Source Project.
The downloadable platform includes the following emulator skin:
For more information about how to develop an application that displays and functions properly on all Android-powered devices, see Supporting Multiple Screens.