docs: update 3.0 version notes

Change-Id: Ib864f2b0964877b69e119cdf8e21e710b5b5fbc4
This commit is contained in:
Scott Main
2011-02-09 16:01:04 -08:00
parent 83c8b8a328
commit ea72329bcc
4 changed files with 546 additions and 183 deletions

View File

@@ -54,7 +54,7 @@ href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
first.</p>
<p>For a high-level introduction to Android 2.3, see the <a
href="http://developer.android.com/sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
<h2 id="relnotes">Revisions</h2>

View File

@@ -51,7 +51,7 @@ href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
first.</p>
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
<h2 id="relnotes">Revisions</h2>

View File

@@ -1,4 +1,6 @@
page.title=Android 3.0 Platform Preview
sdk.platform.version=3.0
sdk.platform.apiLevel=11
@jd:body
<div id="qv-wrapper">
@@ -6,6 +8,7 @@ page.title=Android 3.0 Platform Preview
<h2>In this document</h2>
<ol>
<li><a href="#relnotes">Revisions</a></li>
<li><a href="#api">API Overview</a></li>
<li><a href="#api-level">API Level</a></li>
<li><a href="#apps">Built-in Applications</a></li>
@@ -16,7 +19,7 @@ page.title=Android 3.0 Platform Preview
<h2>Reference</h2>
<ol>
<li><a
href="{@docRoot}sdk/api_diff/honeycomb/changes.html">API
href="{@docRoot}sdk/api_diff/11/changes.html">API
Differences Report &raquo;</a> </li>
</ol>
@@ -28,18 +31,51 @@ Differences Report &raquo;</a> </li>
</div>
</div>
<p><em>API Level:</em> <b>Honeycomb</b></p>
<p>For developers, the Android 3.0 preview is available as a downloadable component for the
Android SDK.</p>
<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
<p class="note"><strong>Note:</strong> Read the <a
href="{@docRoot}sdk/preview/start.html">Getting Started</a> guide for important information
about setting up your development environment and limitiations of the Android 3.0 preview.</p>
<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
component for the Android SDK. The downloadable platform includes an Android library and system
image, as well as a set of emulator skins and more. The downloadable platform includes no external
libraries.</p>
<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
Manager to download the platform into your SDK. For more information, see <a
href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>. If you are new to Android, <a
href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
Highlights</a>.</p>
<h2 id="relnotes">Revisions</h2>
<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
<div class="toggle-content opened" style="padding-left:1em;">
<p><a href="#" onclick="return toggleContent(this)">
<img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" alt="" />
Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
</a></p>
<div class="toggle-content-toggleme" style="padding-left:2em;">
<dl>
<dt>Dependencies:</dt>
<dd>
<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
</dd>
</dl>
</div>
</div>
@@ -49,6 +85,9 @@ about setting up your development environment and limitiations of the Android 3.
including new features and changes in the framework API since the previous version.</p>
<h3>Fragments</h3>
<p>A fragment is a new framework component that allows you to separate distinct elements of an
@@ -65,9 +104,9 @@ activity is running.</p>
<p>Additionally:</p>
<ul>
<li>Fragments are self-contained and can be reused in multiple activities</li>
<li>Fragments can be added, removed, replaced and animated inside the activity</li>
<li>Fragment can be added to a back stack managed by the activity, preserving the state of
<li>Fragments are self-contained and you can reuse them in multiple activities</li>
<li>You can add, remove, replace and animate fragments inside the activity</li>
<li>You can add fragments to a back stack managed by the activity, preserving the state of
fragments as they are changed and allowing the user to navigate backward through the different
states</li>
<li>By <a
@@ -80,8 +119,8 @@ activity's Action Bar (discussed next)</li>
<p>To manage the fragments in your activity, you must use the {@link
android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
as finding fragments in the activity and popping fragments off the back stack to restore them
after they've been removed or hidden.</p>
as finding fragments in the activity and popping fragments off the back stack to restore their
previous state.</p>
<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
android.app.FragmentTransaction}. You can then call methods such as {@link
@@ -92,7 +131,7 @@ android.app.FragmentTransaction#commit commit()} and the system applies the frag
the activity.</p>
<p>For more information about using fragments, read the <a
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation.</p>
@@ -101,49 +140,48 @@ href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> develope
<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
It includes the application logo in the left corner and provides a new interface for items in the
activity's Options Menu. Additionally, the Action Bar allows you to:</p>
<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
Action Bar allows you to:</p>
<ul>
<li>Include select menu items directly in the Action Bar&mdash;as "action
items"&mdash;for quick access to global user actions.
<p>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, the item is placed in the
overflow menu, revealed by the icon on the right side of the Action Bar.</p></li>
<li>Add menu items directly in the Action Bar&mdash;as "action items."
<p>In your XML declaration for the menu item, include the {@code
android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
item appears directly in the Action Bar. Otherwise, the item is placed in the
overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>
<li>Add interactive widgets to the Action Bar&mdash;as "action views"&mdash;such as a search box.
<p>In the XML for the menu item that should behave as an action view, include the {@code
android:actionViewLayout} attribute 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 activates the search dialog).</p></li>
<li>Replace an action item with a widget (such as a search box)&mdash;creating an
"action view."
<p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>
<li>Add an action to the application logo when tapped and replace it with a custom logo
<li>Add an action to the application logo and replace it with a custom logo
<p>The application logo is automatically assigned the {@code android.R.id.home} ID,
which the system deliveres to your activity's {@link android.app.Activity#onOptionsItemSelected
onOptionsItemSelected()} callback when tapped. Simply respond to this ID in your callback
which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
method to perform an action such as go to your application's "home" activity.</p>
<p>To replace the icon with a logo, </p></li>
<p>To replace the icon with a logo, specify your application logo in the manifest file with the
<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
setDisplayUseLogoEnabled(true)} in your activity.</p></li>
<li>Add breadcrumbs for navigating backward through fragments</li>
<li>Add built in tabs and a drop-down list for navigation</li>
<li>Customize the Action Bar themes and custom backgrounds</li>
<li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
<li>Add tabs or a drop-down list to navigate through fragments</li>
<li>Customize the Action Bar with themes and backgrounds</li>
</ul>
<p>The Action Bar is standard for all applications that set either the <a
<p>The Action Bar is standard for all applications that use the new holographic theme, which is
also standard when you set either the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
android:minSdkVersion}</a> or <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> to {@code "Honeycomb"}. (The "Honeycomb" API Level is provisional
and effective only while using the preview SDK&mdash;you must change it to the official API
Level when the final SDK becomes available&mdash;see <a
href="{@docRoot}sdk/preview/start.html">Getting Started</a> for more information.)</p>
android:targetSdkVersion}</a> to {@code "11"}.</p>
<p>For more information about the Action Bar, read the <a
href="{@docRoot}guide/topics/ui/actionbar.html">Action
Bar</a> developer guide.</p>
href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation.</p>
@@ -153,95 +191,109 @@ Bar</a> developer guide.</p>
<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
clipboard. Clipped data can be plain text, a URI, or an intent.</p>
<p>By providing the system access to 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.</p>
<p>By providing the system access to the data you want the user to copy, through a content provider,
the user can copy complex content (such as an image or data structure) from your application and
paste it into another application that supports that type of content.</p>
<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
<p>To create an item to attach to the clipboard ("copy"), you need to create a new {@link
<p>To copy an item to the clipboard, you need to create a new {@link
android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
objects, each describing a single entity. To create a {@link android.content.ClipData} object 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
objects, each describing a single entity. To create a {@link android.content.ClipData} object
containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
appropriate {@link android.content.ClipData.Item}.</p>
{@link android.content.ClipData.Item} you provide.</p>
<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
android.content.ClipboardManager}.</p>
<p>You can then acquire ("paste") a file from the clipboard by calling {@link
<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
android.content.ClipboardManager#getPrimaryClip()} on the {@link
android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
be more complicated and you need to be sure you can actually handle the data type.</p>
be complicated and you need to be sure you can actually handle the data type in the clipboard
before attempting to paste it.</p>
<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
android.content.ClipData.Item}s.</p>
<p>For more information, see the {@link android.content.ClipData} class reference. You can also see
an example implementation of copy and paste in the <a
href="{@docRoot}resources/samples/NotePad/index.html">NotePad</a> sample application.</p>
href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample application.</p>
<h3>Drag and drop</h3>
<p>New APIs facilitate the ability for your application to implement drag and drop
functionality in the UI.</p>
<p>New APIs simplify drag and drop operations in your application's user interface. A drag
operation is the transfer of some kind of data&mdash;carried in a {@link android.content.ClipData}
object&mdash;from one place to another. The start and end point for the drag operation is a {@link
android.view.View}, so the APIs that directly handle the drag and drop operations are
in the {@link android.view.View} class.</p>
<p>A drag and drop operation has a lifecycle that's defined by several drag actions&mdash;each
defined by a {@link android.view.DragEvent} object&mdash;such as {@link
android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
operation can listen for these actions.</p>
<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
the 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.</p>
the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
information about the drag object with views that may receive the object.</p>
<p>To accept a drag object (receive the "drop") in a
{@link android.view.View}, register the view with an {@link android.view.View.OnDragListener
OnDragListener} by
calling {@link android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on
the view, the system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the {@link
android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
describing the
type of event has occurred (such as "drag started", "drag ended", or "drop"). During a drag, the
system repeatedly calls {@link
android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to
deliver a stream of events. The receiving view can
inquire the event type delivered to {@link android.view.View#onDragEvent onDragEvent()} by calling
{@link android.view.DragEvent#getAction getAction()} on the {@link android.view.DragEvent}.</p>
describing the type of drag action has occurred (such as {@link
android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
stream of drag events. The receiving view can inquire the event type delivered to {@link
android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
getAction()} on the {@link android.view.DragEvent}.</p>
<p>Although a drag event may carry a {@link android.content.ClipData} object, this is not related
to the system clipboard. The data being dragged is passed as a {@link
android.content.ClipData} object to {@link android.view.View#startDrag startDrag()} and the system
sends it to the receiving {@link android.view.View} in the {@link android.view.DragEvent} sent to
{@link android.view.View.OnDragListener#onDrag onDrag()}. A drag and drop operation should never
put the dragged data in the global system clipboard.</p>
<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
operation should never put the dragged data in the system clipboard.</p>
<h3>App widgets</h3>
<p>Android 3.0 supports several new widget classes for more interactive app widgets, including:
{@link
android.widget.GridView}, {@link android.widget.ListView}, {@link android.widget.StackView}, {@link
android.widget.ViewFlipper}, and {@link android.widget.AdapterViewFlipper}.</p>
<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
android.widget.AdapterViewFlipper}.</p>
<p>You can also use the new {@link android.widget.RemoteViewsService} to populate
collection views such as ({@link android.widget.GridView}, {@link android.widget.ListView}, and
{@link android.widget.StackView}).</p>
<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
such as from a content provider.</p>
<p>{@link android.appwidget.AppWidgetProviderInfo} also supports two new fields: {@link
<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined with an {@code
&lt;appwidget-provider&gt; XML file) also supports two new fields: {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
app widget subview, which is auto-advanced by the app widgets host. The
app widget subview that should be auto-advanced by the app widgets host. The
{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
app widget looks like and is shown to the user from the widget picker. If this field is not
supplied, the app widget's icon is used for the preview.</p>
<p>Android also provides a new widget preview tool ({@code WidgetPreview}), located in the SDK
tools, to take a screenshot of your app widget, which you can use when specifying the {@link
android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
<p>To help create a preview image for your app widget (to specify in the {@link
android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field), the Android emulator includes an
application called "Widget Preview." To create a preview image, launch this application, select the
app widget for your application and set it up how you'd like your preview image to appear, then save
it and place it in your application's drawable resources.</p>
@@ -251,7 +303,7 @@ android.appwidget.AppWidgetProviderInfo#previewImage} field.</p>
<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
control the notification properties.</p>
create {@link android.app.Notification} objects.</p>
<p>New features include:</p>
<ul>
<li>Support for a large icon in the notification, using {@link
@@ -261,8 +313,8 @@ notification or for media apps to show an album thumbnail.</li>
<li>Support for custom layouts in the status bar ticker, using {@link
android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
<li>Support for custom notification layouts to include buttons with {@link
android.app.PendingIntent}s, for more interactive notification widgets
(such as to control ongoing music in the background).</li>
android.app.PendingIntent}s, for more interactive notification widgets. For example, a
notification can control music playback without starting an activity.</li>
</ul>
@@ -273,9 +325,13 @@ android.app.PendingIntent}s, for more interactive notification widgets
<p>New framework APIs facilitate asynchronous loading of data using the {@link
android.content.Loader} class. You can use it in combination with UI components such as views and
fragments to dynamically load data from worker threads. The {@link
android.content.CursorLoader} subclass is specially designed to help do so for data queried from
a {@link android.content.ContentResolver}.</p>
android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
a {@link android.content.ContentProvider}.</p>
<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
loader for your activity or fragment.</p>
@@ -297,10 +353,10 @@ callbacks when the Bluetooth client is connected or disconnected.</p>
<h3>Animation framework</h3>
<h3 id="animation">Animation framework</h3>
<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
(View, Drawable, Fragment, Object, or anything else). It allows you to define many aspects of an
(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
animation, such as:</p>
<ul>
<li>Duration</li>
@@ -309,13 +365,14 @@ animation, such as:</p>
<li>Animator sets to play animations together, sequentially, or after specified delays</li>
<li>Frame refresh delay</li>
</ul>
<p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
color values, by default. To animate any other type of value, you tell the system how to calculate
the values for that given type, by implementing the {@link android.animation.TypeEvaluator}
interface.</p>
<p>There are two animators you can use to animate values of a property: {@link
<p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
color values, by default. That is, when an object has a property field for one of these types, you
can change its value over time to affect an animation. To animate any other type of value, you tell
the system how to calculate the values for that given type, by implementing the {@link
android.animation.TypeEvaluator} interface.</p>
<p>There are two animators you can use to animate the values of a property: {@link
android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
object or property that is animated as a result. It simply performs the calculations, and you must
@@ -324,7 +381,7 @@ android.animation.ObjectAnimator} is a subclass of {@link android.animation.Valu
allows you to set the object and property to animate, and it handles all animation work.
That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
property of the object to change over time, and a set of values to apply to the property over
time in order to animate it, then start the animation.</p>
time, then start the animation.</p>
<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
animations for changes you make to your activity layout. To enable transitions for part of the
@@ -350,8 +407,11 @@ href="{@docRoot}guide/topics/graphics/animation.html">Animation</a> developer gu
<li><b>Multiple-choice selection for ListView and GridView</b>
<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
android.widget.AbsListView#setChoiceMode setChoiceMode()} allows for selecting multiple items
from a {@link android.widget.ListView} and {@link android.widget.GridView}.</p>
android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
conjunction with the Action Bar, users can select multiple items and then select the action to
perform from a list of options in the Action Bar (which has transformed into a Multi-choice
Action Mode).</p>
<p>To enable multiple-choice selection, call {@link
android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
@@ -373,10 +433,11 @@ class in the API Demos sample application.</p>
<li><b>New APIs to transform views</b>
<p>New APIs allow you to easily apply 2D and 3D transformations to {@link
android.view.View}s in your activity layout, using a set of object properties that define the view's
<p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
layout. New transformations are made possible with a set of object properties that define the view's
layout position, orientation, transparency and more.</p>
<p>New methods to set properties include: {@link android.view.View#setAlpha setAlpha()}, {@link
<p>New methods to set the view properties include: {@link android.view.View#setAlpha
setAlpha()}, {@link
android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
@@ -385,14 +446,16 @@ setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android
setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
<p>Some methods also have a corresponding XML attribute that you can specify in your layout
file. Available attributes include: {@code translationX}, {@code translationY}, {@code rotation},
file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
translationY}, {@code rotation},
{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
{@code transformPivotY}, and {@code alpha}.</p>
<p>Using some of these new properties in combination with the new animation framework (discussed
previously), you can easily create some fancy animations to your views. For example, to rotate a
<p>Using some of these new view properties in combination with the new <a
href="#animation">animation framework</a> (discussed
above), you can easily apply some fancy animations to your views. For example, to rotate a
view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
android.view.View}, the "rotationY" property, and the values to use:</p>
android.view.View}, the "rotationY" property, and the start and end values:</p>
<pre>
ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
animator.setDuration(2000);
@@ -403,16 +466,25 @@ animator.start();
<li><b>New holographic themes</b>
<p>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. The system applies these styles
using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.
Any application that targets the Android 3.0 platform inherits 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 the holographic theme.</p>
<p>The standard system widgets and overall look have been redesigned and incorporate a new
"holographic" user interface theme. The system applies the new theme
using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>
<p>Any application that targets the Android 3.0 platform&mdash;by setting either the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
or <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> value to {@code "11"}&mdash;inherits the holographic theme by default.
However, if your application also applies its own theme, then your theme will override the
holographic theme, unless you update your styles to inherit the holographic theme.</p>
<p>To apply the holographic theme to individual activities or to inherit them in your own theme
definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
themes.</p>
themes. If your application is compatible with version of Android lower than 3.0 and applies
custom themes, then you should <a
href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
version</a>.</p>
</li>
@@ -430,38 +502,36 @@ themes.</p>
each child at a regular interval.</p></li>
<li>{@link android.widget.CalendarView}
<p>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.</p></li>
<p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
<li>{@link android.widget.ListPopupWindow}
<p>Anchors itself to a host view and displays a list of choices, such as for a list of
suggestions when typing into an {@link android.widget.EditText} view.</p></li>
<li>{@link android.widget.NumberPicker}
<p>Enables the user to select a number from a predefined range. The widget presents an
input field and up and down buttons for selecting a number. Touching the input field 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.</p></li>
<p>Enables the user to select a number from a predefined range. The widget presents an input
field and up and down buttons for selecting a number. Touching the input field allows the user to
scroll through values or touch again to directly edit the current value. It also allows you to map
positions to strings, so that the corresponding string is displayed instead of the index
position.</p></li>
<li>{@link android.widget.PopupMenu}
<p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
popup
appears below the anchor view if there is room, or above it if there is not. If the IME (soft
keyboard) is visible, the popup does not overlap it until it is touched.</p></li>
popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
keyboard) is visible, the popup does not overlap the IME it until the user touches the
menu.</p></li>
<li>{@link android.widget.SearchView}
<p>Provides a search box that works in conjunction with a search provider (in the same manner as
the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>).
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.</p></li>
<p>Provides a search box that works in conjunction with the Search Manager (in the same manner
as the traditional <a href="{@docRoot}guide/topics/search/search-dialog.html">search dialog</a>). It
can also display recent query suggestions or custom suggestions as configured by the search
provider. This widget is particularly useful for offering search in the <a
href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>.</p></li>
<li>{@link android.widget.StackView}
<p>A view that displays its children in a 3D stack and allows users to discretely swipe through
the
children.</p></li>
<p>A view that displays its children in a 3D stack and allows users to swipe through
views like a rolodex.</p></li>
</ul>
</li>
@@ -470,13 +540,6 @@ It
<!--
<h3>WebKit</h3>
<h3>JSON (utilities)</h3>
-->
<h3>Graphics</h3>
<ul>
@@ -548,7 +611,9 @@ camera.</p></li>
<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
streaming session. The media framework supports most of the HTTP Live streaming specification,
including adaptive bit rate.</p></li>
including adaptive bit rate. See the <a
href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
more information.</p></li>
<li><b>EXIF data</b>
@@ -599,6 +664,298 @@ rights. However, device manufacturers may ship DRM plug-ins with their devices.<
<h3>Keyboard support</h3>
<ul>
<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>
<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
Delete and others. You can determine whether key events are coming from a full keyboard by
querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>
<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A. It also supports PageUp/PageDown,
Home/End, and keyboard-based text selection.</li>
<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
{@link android.view.KeyEvent#hasNoModifiers()},
{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>
<li>Applications can implement custom keyboard shortcuts by subclassing {@link
android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
{@link android.app.Activity#onKeyShortcut onKeyShortcut()}. The framework calls this method
whenever a key is combined with Ctrl key. When creating an <a
href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
android:numericShortcut} attribute for each <a
href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code &lt;item&gt;}</a>
element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
input.</li>
</ul>
<h3>Split touch events</h3>
<p>Previously, only a single view could accept touch events at one time. Android 3.0
adds support for splitting touch events across views and even windows, so different views can accept
simultaneous touch events.</p>
<p>Split touch events is enabled by default when an application targets
Android 3.0. That is, when the application has set either the <a
href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
android:targetSdkVersion}</a> attribute's value to {@code "11"}.</p>
<p>However, the following properties allow you to disable split touch events for
specific view groups, certain activities, or the entire application.</p>
<ul>
<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
allows you to disable split motion events for the children in a layout. For example:
<pre>
&lt;LinearLayout android:splitMotionEvents="false" ... >
...
&lt;/LinearLayout>
</pre>
</li>
<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
allows you to disable split motion events across windows by applying it to a theme for the activity
or entire application. For example:
<pre>
&lt;style name="NoSplitMotionEvents" parent="android:Theme.Holo">
&lt;item name="android:windowEnableSplitTouch">false&lt;/item>
...
&lt;/style>
</pre>
<p>When this theme is applied to an <a
href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> or <a
href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>,
only touch events within the current activity window are accepted. For example, by disabling split
touch events across windows, the system bar cannot receive touch events at the same time as the
activity.</p>
<p>For more information about creating a theme, read <a
href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
</li>
</ul>
<h3>WebKit</h3>
<ul>
<li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
{@link android.webkit.WebView}.</li>
<li>New {@link android.webkit.WebSettings} methods:
<ul>
<li>{@link
android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
{@code true}).</li>
<li>New {@link android.webkit.WebSettings} method, {@link
android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
to maximize the performance (for example, the WebView's content may not update during the
transition).</li>
</ul>
<li>New {@link android.webkit.WebView} methods:
<ul>
<li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
network traffic when the WebView is not in the foreground.</li>
<li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
onPause()}.</li>
<li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
current view as a web archive on the device.</li>
<li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
the current view.</li>
</ul>
</li>
</ul>
<h3>Browser</h3>
<p>The Browser application adds the following features to support web applications:</p>
<ul>
<li><b>Media capture</b>
<p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
specification, the Browser allows web applications to access audio, image and video capture
capabilities of the device. For example, the following HTML provides an input for the user to
capture a photo to upload:</p>
<pre>
&lt;input type="file" accept="image/*;capture=camera" />
</pre>
<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
new image with the camera or select one from the device (such as from the Gallery application).</p>
</li>
<li><b>Device Orientation</b>
<p>As defined by the <a
href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
specification, the Browser allows web applications to listen to DOM events that provide information
about the physical orientation and motion of the device.</p>
<p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
expressed with acceleration and rotation rate data. A web page can register for orientation
events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
and register for motion events by registering the {@code "devicemotion"} event type.</p>
</li>
<li><b>CSS 3D Transforms</b>
<p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
dimensions.</p>
</li>
</ul>
<h3>JSON utilities</h3>
<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
read and write JSON streams. The new APIs compliment the {@link org.json} classes which manipulate a
document in memory.</p>
<p>You can create an instance of {@link android.util.JsonReader} by calling
its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
key name with {@link android.util.JsonReader#nextName()}, read the value using methods
respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
android.util.JsonReader#nextInt()}, and continue doing so while {@link
android.util.JsonReader#hasNext()} is true.</p>
<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
value.</p>
<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
method in each class configures them to be more liberal in what they accept. This lenient
parse mode is also compatible with the {@link org.json}'s default parser.</p>
<h3>New feature constants</h3>
<p>The <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
manfest element should be used to inform external entities (such as Android Market) of the set of
hardware and software features on which your application depends. In this release, Android adds the
following new constants that applications can declare with this element:</p>
<ul>
<li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
<p>When declared, this indicates that the application is compatible with a device that offers an
emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
system that can emulate a subset of touchscreen
capabilities. An example of such an input system is a mouse or remote control that drives an
on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
<p>If your application does <em>not</em> require complicated gestures and you do
<em>not</em> want your application filtered from devices with an emulated touchscreen, you
should declare {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
element. This way, your application will be available to the greatest number of device types,
including those that provide only an emulated touchscreen input.</p>
<p>All devices that include a touchscreen also support {@link
android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
a touchscreen, you should add a <a
href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
element for faketouch.</p>
</li>
</ul>
<h3>New permissions</h3>
<ul>
<li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
"android.permission.BIND_REMOTEVIEWS"}
<p>This must be declared as a required permission in the <a
href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> manifest
element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
collection view, the manifest entry may look like this:</p>
<pre>
&lt;service android:name=".widget.WidgetService"
android:exported="false"
android:permission="android.permission.BIND_REMOTEVIEWS" />
</pre>
</ul>
<h3>New platform technologies</h3>
<ul>
<li><strong>Storage</strong>
<ul>
<li>ext4 file system support to enable onboard eMMC storage.</li>
<li>FUSE file system to support MTP devices.</li>
<li>USB host mode support to support keyboards and USB hubs.</li>
<li>Support for MTP/PTP </li>
</ul>
</li>
<li><strong>Linux Kernel</strong>
<ul>
<li>Upgraded to 2.6.36</li>
</ul>
</li>
<li><strong>Dalvik VM</strong>
<ul>
<li>New code to support and optimize for SMP</li>
<li>Various improvements to the JIT infrastructure</li>
<li>Garbage collector improvements:
<ul>
<li>Tuned for SMP</li>
<li>Support for larger heap sizes</li>
<li>Unified handling for bitmaps and byte buffers</li>
</ul>
</li>
</ul>
</li>
<li><strong>Dalvik Core Libraries</strong>
<ul>
<li>New, much faster implementation of NIO (modern I/O library)</li>
<li>Improved exception messages</li>
<li>Correctness and performance fixes throughout</li>
</ul>
</li>
</ul>
<h3 id="api-diff">API differences report</h3>
<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
{@sdkPlatformApiLevel}), see the <a
href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
@@ -606,21 +963,25 @@ rights. However, device manufacturers may ship DRM plug-ins with their devices.<
<h2 id="api-level">API Level</h2>
<p>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.</p>
<p>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 <code>android:minSdkVersion="Honeycomb"</code>, in the
<code>&lt;uses-sdk&gt;</code> element in the application's manifest.</p>
<p>For more information about using this provisional API Level and setting up your environment
to use the preview SDK, please see the <a href="{@docRoot}sdk/preview/start.html">Getting
Started</a> document.</p>
<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
the framework API. The Android {@sdkPlatformVersion} API
is assigned an integer identifier &mdash;
<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
stored in the system itself. This identifier, called the "API Level", allows the
system to correctly determine whether an application is compatible with
the system, prior to installing the application. </p>
<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
you need compile the application against the Android library that is provided in
the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might
also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
manifest. If your application is designed to run only on Android 2.3 and higher,
declaring the attribute prevents the application from being installed on earlier
versions of the platform.</p>
<p>For more information about how to use API Level, see the <a
href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
<h2 id="apps">Built-in Applications</h2>
@@ -632,6 +993,7 @@ built-in applications:</p>
<tr>
<td style="border:0;padding-bottom:0;margin-bottom:0;">
<ul>
<li>API Demos</li>
<li>Browser</li>
<li>Calculator</li>
<li>Camera</li>
@@ -646,11 +1008,14 @@ built-in applications:</p>
<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
<ul>
<li>Gallery</li>
<li>Gestures Builder</li>
<li>Messaging</li>
<li>Music</li>
<li>Search</li>
<li>Settings</li>
<li>Spare Parts (developer app)</li>
<li>Spare Parts</li>
<li>Speech Recorder</li>
<li>Widget Preview</li>
</ul>
</td>
</tr>

View File

@@ -40,25 +40,15 @@
if:sdk.preview ?>
<li><h2>Android 3.0 Preview SDK</h2>
<ul>
<li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> <span class="new">new!</span></li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
<span class="en">Android 3.0 Platform</span></a> <span class="new">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/api_diff/honeycomb/changes.html">API Differences Report
&raquo;</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a> <span
class="new">new!</span></li>
</ul>
</li><?cs
/if ?>
<?cs
if:sdk.preview ?>
<li><h2>Android 3.0 Preview</h2>
<li><h2>Android x.x Preview</h2>
<ul>
<li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a> <span
class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/preview/index.html">SDK</a> <span class="new">new!</span></li>
</ul>
</li><?cs
/if ?>
@@ -87,18 +77,19 @@ class="new">new!</span></li>
</ul>
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.3.3.html">
<span class="en">Android 2.3.3 Platform</span></a> <span class="new">new!</span></div>
<div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
<span class="en">Android 3.0 Platform</span></a> <span class="new">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report &raquo;</a></li>
<li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/11/changes.html">API Differences Report &raquo;</a></li>
</ul>
</li>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
<span class="en">Android 2.3 Platform</span></a></div>
<div><a href="<?cs var:toroot ?>sdk/android-2.3.3.html">
<span class="en">Android 2.3.3 Platform</span></a> <span class="new">new!</span></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report &raquo;</a></li>
<li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report &raquo;</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>sdk/android-2.2.html">Android 2.2 Platform</a></li>
@@ -108,6 +99,13 @@ class="new">new!</span></li>
<li class="toggle-list">
<div><a href="#" onclick="toggle(this.parentNode.parentNode,true); return false;">Older Platforms</a></div>
<ul>
<li class="toggle-list">
<div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
<span class="en">Android 2.3 Platform</span></a></div>
<ul>
<li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report &raquo;</a></li>
</ul>
</li>
<li><a href="<?cs var:toroot ?>sdk/android-2.0.1.html">Android 2.0.1 Platform</a></li>
<li><a href="<?cs var:toroot ?>sdk/android-2.0.html">Android 2.0 Platform</a></li>
<li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Platform</a></li>
@@ -115,7 +113,7 @@ class="new">new!</span></li>
</li>
</ul>
<ul>
<li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r9</a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r10</a> <span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
</ul>
</li>
@@ -131,7 +129,7 @@ class="new">new!</span></li>
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
<li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 9.0.0
<li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 10.0.0
<span style="display:none" class="de"></span>
<span style="display:none" class="es"></span>
<span style="display:none" class="fr"></span>
@@ -153,7 +151,7 @@ class="new">new!</span></li>
<span style="display:none" class="zh-TW"></span>
</h2>
<ul>
<li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r5b</a>
<li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r6</a>
<span class="new">new!</span></li>
<li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
</ul>