Android 3.0 API

API 级别11

对于开发者,Android 3.0 平台 (HONEYCOMB) 可作为 Android SDK 的可下载组件使用。可下载的平台包含 Android 库和系统映像,以及一组模拟器皮肤等。可下载的平台不包含任何外部库。

对于开发者,Android 3.0 平台以 Android SDK 的可下载组件可下载的平台包含 Android 库和系统映像,以及一组模拟器皮肤等。要开始针对 Android 3.0 进行开发或测试, 使用 Android SDK 管理器将该平台下载到您的 SDK 中。

API 概览

以下各部分从技术层面概要介绍了 Android 3.0 面向开发者的新功能。 包括自上一个版本以来该框架 API 中的新功能和变化。

Fragment

fragment 是一种新的框架组件,可让您将不同元素的不同元素 activity 转换为独立模块,这些模块可定义自己的界面和生命周期。要创建 fragment,因此必须扩展 Fragment 类并实现多个生命周期 回调方法,类似于 Activity。然后,您可以将多个 一个 Activity 中的多个 Fragment 来构建多窗格界面,其中每个 窗格管理自己的生命周期和用户输入。

您还可以使用 fragment 而不提供界面,而是将 fragment 用作 activity 的工作器,例如管理仅在 activity 运行时发生的下载进度。

此外:

  • fragment 是独立的,您可以在多个 activity 中重复使用它们
  • 您可以在 activity 内添加、移除、替换 fragment 以及为其添加动画效果
  • 您可以将 fragment 添加到由 activity 管理的返回堆栈中,以便在 fragment 发生更改时保留其状态,并允许用户回退到不同的状态
  • 通过提供 替代布局,您可以根据 屏幕尺寸和方向
  • fragment 可以直接访问其容器活动,并且可以向 活动的操作栏(稍后讨论)

如需管理 activity 中的 fragment,您必须使用 FragmentManager,它提供了多种可与 fragment 交互的 API,例如 在 activity 中查找 fragment 以及从返回堆栈中弹出 fragment 以恢复其 之前的状态。

如需执行添加或移除 fragment 等事务,您必须创建一个 FragmentTransaction。然后,您可以调用 add() remove()replace() 等方法。应用了所有 要对事务执行的更改,则必须调用 commit(),并且系统会将 fragment 事务应用于 相应活动

如需详细了解如何使用 fragment,请参阅 fragment 文档。API 演示应用中还提供了多个示例。

操作栏

操作栏取代了 activity 窗口顶部的传统标题栏。 它在左下角包含应用徽标,并为选项菜单中的项提供了新的界面。此外, 通过操作栏,您可以:

  • 直接在操作栏中添加菜单项(作为“操作项”)。

    在菜单项的 XML 声明中,添加值为 "ifRoom"android:showAsAction 属性。如果有足够的空间,菜单项会直接显示在操作栏中。否则,该项会放置在溢出菜单中,通过操作栏右侧的菜单图标显示。

  • 将操作项替换为微件(例如搜索框),从而创建一个 “action view”。

    在菜单项的 XML 声明中,添加 android:actionViewLayout 属性 具有布局资源或类名称为android:actionViewClass 微件。(您还必须声明 android:showAsAction 属性,以便该项显示在操作栏中。)如果操作栏中没有足够的空间,并且该项显示在溢出菜单中,则该项的行为就像普通菜单项一样,不会显示微件。

  • 向应用徽标添加操作,并将其替换为自定义徽标

    系统会自动为应用徽标分配 android.R.id.home ID, 系统会在轻触时将其传递给 Activity 的 onOptionsItemSelected() 回调。只需在回调中响应此 ID 执行转到应用“首页”等操作的方法活动。

    如需将图标替换为徽标,请在清单文件中使用 android:logo 属性指定应用徽标,然后在 activity 中调用 setDisplayUseLogoEnabled(true)

  • 添加面包屑导航,以便在 fragment 的返回堆栈中向后导航
  • 添加标签页或下拉列表以浏览 fragment
  • 使用主题和背景自定义操作栏

对于使用新全息主题的所有应用,ActionBar 都是标准的。如果您将 android:minSdkVersionandroid:targetSdkVersion 设置为 "11",ActionBar 也是标准的。

如需详细了解操作栏,请参阅操作栏文档。若干 API Demos 应用。

系统剪贴板

现在,应用可在整个系统范围内复制数据(不仅仅是文本) 剪贴板。剪裁的数据可以是纯文本、URI 或 intent。

通过内容提供程序向系统提供您希望用户复制的数据的访问权限, 用户可以从您的应用中复制复杂内容(例如图片或数据结构),并且 并将其粘贴到支持此类内容的其他应用程序中。

如需开始使用剪贴板,请通过调用 getSystemService(CLIPBOARD_SERVICE) 获取全局 ClipboardManager 对象。

如需将项复制到剪贴板,您需要创建一个新的 ClipData 对象,其中包含一个或多个 ClipData.Item 对象,每个对象都描述单个实体。创建 ClipData 对象 只有一个 ClipData.Item,则可以使用其中一种辅助方法, 例如 newPlainText()newUri()newIntent(),它们都会返回一个 ClipData 对象,且该对象预载了 ClipData.Item

如需将 ClipData 添加到剪贴板,请将其传递给 ClipboardManager 实例的 setPrimaryClip()

然后,您可以对 ClipboardManager 调用 getPrimaryClip(),从剪贴板中读取文件(以便将其粘贴)。处理您收到的 ClipData 可以 很复杂,您需要确保您可以实际处理剪贴板中的数据类型 然后再尝试粘贴。

剪贴板一次只能存储一块剪贴数据(一个 ClipData 对象),但一个 ClipData 可以包含多个 ClipData.Item

有关详情,请参阅复制 和粘贴文档。您还可以在 API 演示中查看复制和粘贴的简单实现。 示例,以及记事本示例中更完整的实现。

拖放

新的 API 简化了应用界面中的拖放操作。拖动操作是指将某种数据(在 ClipData 对象中传输)从一个位置拖动到另一个位置。拖动操作的起点和终点是 View,因此直接处理拖放操作的 API 为 (位于 View 类中)。

拖放操作具有生命周期,该生命周期由多个拖动操作定义(每个操作由 DragEvent 对象定义),例如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP。想要参与拖动的每个视图 操作可以监听这些操作。

如需开始拖动 activity 中的内容,请调用 startDrag()View 上,提供一个代表以下内容的 ClipData 对象: 要拖动的数据,使用 View.DragShadowBuilder 辅助创建“阴影” 用户拖动手指时会看到的对话框,以及可以共享的 Object。 拖动对象的相关信息,以及可接收对象的视图。

如需在 View 中接受拖动对象(接收“拖放”操作),请通过调用 setOnDragListener() 将视图注册到 OnDragListener。当视图上发生拖动事件时, 系统会为 OnDragListener 调用 onDrag(),后者会收到 DragEvent 用于描述已发生的拖动操作类型(例如 ACTION_DRAG_STARTEDACTION_DRAG_ENTEREDACTION_DROP)。在拖动期间,系统会针对拖动下方的视图反复调用 onDrag(),以传递 事件流。接收视图可以通过对 DragEvent 调用 getAction() 来查询传递给 onDragEvent() 的事件类型。

注意:虽然拖动事件可能携带 ClipData 对象,但这与系统剪贴板无关。拖放 操作绝不应将拖动的数据放入系统剪贴板。

有关详情,请参阅拖动和 Dropping 文档。您还可以在 API 演示应用和 Honeycomb 图库应用中查看拖放功能的实现。

应用微件

Android 3.0 支持多个新的 widget 类,可在用户的主屏幕上显示更具互动性的应用 widget,包括:GridViewListViewStackViewViewFlipperAdapterViewFlipper

更重要的是,您可以使用新的 RemoteViewsService 创建包含集合的应用 widget,使用由远程数据(例如来自内容提供程序的数据)支持的 widget(例如 GridViewListViewStackView)。

AppWidgetProviderInfo 类(在 XML 中使用 <appwidget-provider> 元素定义)也支持两个新字段:autoAdvanceViewIdpreviewImage。借助 autoAdvanceViewId 字段,您可以指定应由应用微件的托管应用自动跳转的应用微件子视图的视图 ID。previewImage 字段用于指定预览来描绘应用微件是什么样子的,并通过微件选择器显示给用户。如果此字段不是 应用微件的图标将用于预览。

为了帮助为应用 widget 创建预览图片(在 previewImage 字段中指定),Android 模拟器包含一个 名为“Widget Preview”的应用如需创建预览图片,请启动此应用,为您的应用选择应用微件并设置您希望如何显示预览图片,然后将其保存并放在您的应用的可绘制资源中。

您可以在 StackView 应用 widgetWeather List Widget 应用中查看新应用 widget 功能的实现。

状态栏通知

Notification API 已经过扩展,可支持更多内容状态 栏通知,以及新的 Notification.Builder 类,可让您轻松 创建 Notification 对象。

新功能包括:

  • 支持使用 setLargeIcon() 在通知中使用大图标。这通常用于社交应用显示通知来源人员的联系人照片,或媒体应用显示影集缩略图。
  • 支持使用 setTicker() 在状态栏动态消息中使用自定义布局。
  • 支持自定义通知布局,以包含带 PendingIntent 的按钮,从而实现更具互动性的通知微件。例如,通知无需启动 activity 即可控制音乐播放。

内容加载器

新的框架 API 支持使用 Loader 类异步加载数据。您可以将其与界面组件(例如视图和 fragment,用于从工作器线程动态加载数据。CursorLoader 子类专为帮助您对由 ContentProvider 支持的数据执行此操作而设计。

您只需实现 LoaderCallbacks 接口,以便在请求新的加载器或数据发生更改时接收回调,然后调用 initLoader() 为 activity 或 fragment 初始化加载器。

如需了解详情,请阅读加载器文档。您还可以在 LoaderCursorLoaderThrottle 示例中查看使用加载器的示例代码。

蓝牙 A2DP 和耳机 API

Android 现在包含一些 API,供应用验证已连接的蓝牙 A2DP 的状态 耳机配置文件设备。例如,应用可以识别蓝牙耳机何时 以便聆听音乐,并根据需要通知用户。应用还可以 针对供应商特定 AT 命令进行广播,并通知用户连接状态 例如当所连接设备的电池电量不足时。

您可以通过使用 A2DPHEADSET 调用 getProfileProxy() 来初始化相应的 BluetoothProfile。 配置文件常量和一个用于接收的 BluetoothProfile.ServiceListener 回调。

动画框架

借助全新的灵活动画框架,您可以为任何对象(视图、可绘制对象、Fragment、对象或任何其他对象)的任意属性添加动画效果。借助它,您可以定义动画的多个方面,例如:

  • 时长
  • 重复次数和行为
  • 时间插值类型
  • Animator 设置为一起、按顺序或在指定延迟之后播放动画
  • 帧刷新延迟

您可以为对象的 int、float 和十六进制类型定义这些动画方面和其他方面 颜色值。也就是说,当对象具有其中一种类型的属性字段时, 可以随着时间的推移更改其值来影响动画。要为任何其他类型的值添加动画效果,您可以指示 通过实现 TypeEvaluator 接口,让系统如何计算给定类型的值。

您可以使用两个 Animator 为属性的值添加动画效果:ValueAnimatorObjectAnimatorValueAnimator 会计算动画值,但不知道具体的 以动画形式呈现的对象或属性。它只执行计算, 监听更新并使用自己的逻辑处理数据。ObjectAnimatorValueAnimator 的子类,可让您设置要添加动画效果的对象和属性,并处理所有动画工作。也就是说,您需要向 ObjectAnimator 提供要添加动画效果的对象、要随时间变化的对象属性,以及一组要随时间应用于该属性的值,然后启动动画。

此外,LayoutTransition 类还支持自动转场 动画效果。要为部分场景启用转场效果 创建一个 LayoutTransition 对象,并将其设置为 任何 ViewGroup 都可通过调用 setLayoutTransition() 触发。这样一来,每当向组中添加或从组中移除项时,系统都会运行默认动画。要指定自定义 对 LayoutTransition 调用 setAnimator(),并提供自定义 Animator。 例如 ValueAnimatorObjectAnimator

如需了解详情,请参阅属性动画文档。您可以 还可查看使用 API 中动画 API 的几个示例 演示应用。

扩展的界面框架

  • ListView 和 GridView 的单选题选项

    setChoiceMode() 的新 CHOICE_MODE_MULTIPLE_MODAL 模式可让用户选择多项内容 (通过 ListViewGridView)。在以下环境中使用时 与操作栏结合使用时,用户可以选择多个项目,然后选择要 操作栏的选项列表(现已转换为 操作模式)。

    如需启用多选选择,请调用 setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL) 并向 setMultiChoiceModeListener() 注册 MultiChoiceModeListener

    当用户长按某项内容时,操作栏会切换为“多选” 操作模式。系统会通过调用 onItemCheckedStateChanged() 来通知 MultiChoiceModeListener 选择了项目。

    有关多选选择的示例,请参阅 List15. Java 类。

  • 用于转换视图的新 API

    借助新的 API,您可以轻松地将 2D 和 3D 转换应用于 activity 布局中的视图。通过一组用于定义视图的布局位置、屏幕方向、透明度等的对象属性,可以实现新的转换。

    用于设置视图属性的新方法包括:setAlpha()setBottom()setLeft()setRight()setBottom()setPivotX()setPivotY()setRotationX()setRotationY()setScaleX()setScaleY()setAlpha() 等。

    某些方法还具有相应的 XML 属性,您可以在布局文件中指定该属性,以应用默认转换。可用属性包括:translationXtranslationYrotationrotationXrotationYscaleXscaleYtransformPivotXtransformPivotYalpha

    将部分新的视图属性与新的动画框架结合使用(讨论 因此,您可以轻松对视图应用一些精美的动画。例如,如需沿 y 轴旋转视图,请为 ObjectAnimator 提供 View、“rotationY”属性以及开始值和结束值:

    Kotlin

    ObjectAnimator.ofFloat(myView, "rotationY", 0f, 360f).apply {
        duration = 2000
        start()
    }

    Java

    ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
    animator.setDuration(2000);
    animator.start();
  • 新的全息主题

    重新设计了标准系统微件和整体外观,并纳入了 “全息”界面主题系统会应用新主题 使用标准的样式和主题系统。

    任何以 Android 3.0 平台为目标平台的应用,通过设置 android:minSdkVersionandroid:targetSdkVersion 值设为 "11" - 系统会默认沿用全息主题。 但是,如果您的应用还应用了自己的主题,则您的主题将覆盖 全息主题,除非您更新样式以继承全息主题。

    将全息主题应用于个别 activity,或在您自己的主题中继承这些主题 定义,请从下列新 Theme.Holo 中选择一个 主题。如果您的应用与 Android 3.0 之前的版本兼容,并应用 自定义主题,那么您应该根据平台选择主题 version

  • 新微件
    • AdapterViewAnimator

      AdapterView 的基类,用于在其视图之间切换时执行动画。

    • AdapterViewFlipper

      简单的 ViewAnimator,用于在两个或多个具有 已添加到该文件夹中一次只显示一个子级。如果请求,它可以定期在每个子项之间自动切换。

    • CalendarView

      允许用户通过轻触日期从日历中选择日期,还可以滚动或快速滑动日历以找到所需日期。您可以配置微件中可用的日期范围。

    • ListPopupWindow

      将自身锚定到宿主视图,并显示选项列表,例如在 EditText 视图中输入内容时显示的建议列表。

    • NumberPicker

      让用户从预定义的范围中选择数字。该 widget 提供 字段以及向上和向下按钮,用于选择数字。用户可以通过轻触输入字段来滚动浏览值,也可以再次轻触以直接修改当前值。您还可以将位置映射到字符串,以便显示相应的字符串,而不是索引位置。

    • PopupMenu

      在锚定到视图的模态弹出式窗口中显示 Menu。如果空间足够,弹出式窗口会显示在锚定视图下方,否则会显示在其上方。如果 IME(软 键盘),则弹出式内容不会与其 IME 重叠,除非用户触摸 菜单。

    • SearchView

      提供一个搜索框,您可以对其进行配置以将搜索查询发送到指定的 activity 并显示搜索建议(与传统搜索对话框的方式相同)。此微件对于在操作栏中提供搜索微件特别有用。如需了解详情,请参阅创建搜索界面

    • StackView

      一种视图,可在 3D 堆叠中显示其子项,并允许用户滑动浏览 就像 Rolodex 一样。

图形

  • 硬件加速 2D 图形

    现在,您可以通过在清单元素的 <application> 中设置 android:hardwareAccelerated="true",为您的应用启用 OpenGL 渲染程序 元素或单个 <activity> 元素。

    此标志有助于加快应用的绘制速度。这会使动画更加流畅 滚动浏览更顺畅,同时提升了性能和对用户互动的响应。

  • 查看对硬件和软件层的支持

    默认情况下,View 未指定图层。您可以使用 setLayerType()layerType 属性,指定视图由硬件层或软件层(分别由值 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 指定)提供支持。

    硬件层由硬件专用纹理(通常是 OpenGL 硬件上的帧缓冲区对象或 FBO)提供支持,并会导致系统使用 Android 的硬件渲染流水线渲染视图,但前提是已为视图层次结构启用硬件加速。当硬件 加速,则硬件层的行为与软件层完全相同。

    软件层由位图支持,会导致系统使用 Android 的软件渲染流水线渲染视图,即使启用了硬件加速也是如此。如果受影响的视图树经常更新,则应避免使用软件层。每次更新都需要重新渲染软件层,这可能会很慢。

    如需了解详情,请参阅 LAYER_TYPE_HARDWARELAYER_TYPE_SOFTWARE 文档。

  • Renderscript 3D 图形引擎

    RenderScript 是一个运行时 3D 框架,可提供用于构建 3D 场景的 API,以及一种可实现最大性能的特殊平台无关着色器语言。通过使用 Renderscript 可以加快图形操作和数据处理的速度。RenderScript 是一种 为应用、壁纸、轮播界面等对象添加高性能 3D 效果。

    有关详情,请参阅使用 Renderscript 文档。

媒体

  • 延时摄影视频

    摄像头 API 现在支持录制延时摄影视频。setCaptureRate() 用于设置应以何种速率捕获帧。

  • 图像流的纹理支持

    借助新的 SurfaceTexture,您可以将图像流捕获为 OpenGL ES 纹理。通过为 Camera 实例调用 setPreviewTexture(),您可以指定用于绘制摄像头视频播放或预览帧的 SurfaceTexture

  • HTTP Live Streaming

    应用现在可以将 M3U 播放列表网址传递给媒体框架,以启动 HTTP Live 流式传输会话。该媒体框架支持大多数 HTTP Live Streaming 规范, 包括自适应比特率如需了解详情,请参阅支持的媒体格式文档。

  • EXIF 数据

    ExifInterface包含有关照片光圈、ISO 和曝光的新字段 。

  • 摄像机配置文件

    新增了 hasProfile() 方法和几个视频 品质配置文件(例如 QUALITY_1080PQUALITY_720PQUALITY_CIF 等)可让您确定摄像机 画质选项

  • 数字媒体文件传输

    该平台内置对通过 USB 的媒体/图片传输协议 (MTP/PTP) 的支持,让用户能够在设备之间以及向主机计算机轻松传输任何类型的媒体文件。开发者可以在此支持的基础上,创建可让用户创建或管理他们可能希望在不同设备之间传输或分享的富媒体文件的应用。

  • 数字版权管理 (DRM)

    用于检查和强制执行数字版权管理的全新可扩展数字版权管理 (DRM) 框架 权利。它在以下两个架构层中实现:

    • DRM 框架 API,可供应用使用并通过 Dalvik VM 运行 标准应用
    • 原生代码 DRM 管理器:用于实现框架 API,并为 DRM 插件提供接口,以便处理各种 DRM 方案的版权管理和解密操作。

    对于应用程序开发者,该框架提供了一个抽象、统一的 API,可以简化 对受保护内容的管理。该 API 隐藏了 DRM 操作的复杂性,并允许 对受保护内容、不受保护内容以及各种数字版权管理 (DRM) 应用采用一致的操作模式 架构。

    对于设备制造商、内容所有者和互联网数字媒体提供商,DRM 框架的插件 API 提供了一种方法,可将对所选 DRM 方案的支持添加到 Android 系统,用于安全强制执行内容保护。

    预览版不提供任何用于检查和强制执行数字版权管理规定的原生 DRM 插件 权利。不过,设备制造商可以将 DRM 插件随设备一起提供。

    您可以在 android.drm 软件包中找到所有 DRM API。

键盘支持

  • 支持 Ctrl、Meta、Caps Lock、Num Lock 和 Scroll Lock 修饰符。如需更多信息 请参阅 META_CTRL_ON 和相关字段。
  • 支持完整的桌面式键盘,包括支持 Escape、Home、End、Delete 等键。您可以通过以下方式确定按键事件是否来自全键盘 查询 getKeyboardType() 并检查 KeyCharacterMap.FULL
  • TextView 现在支持基于键盘的剪切、复制 使用组合键 Ctrl+X、Ctrl+C Ctrl+V 和 Ctrl+A。它还支持 PageUp/PageDown、Home/End 和 基于键盘的文本选择。
  • KeyEvent 添加了几种新方法,以便您更轻松地检查密钥 修饰符状态正确且一致。请参阅hasModifiers(int)hasNoModifiers()metaStateHasModifiers(), metaStateHasNoModifiers()
  • 应用可以通过创建 ActivityDialogView 的子类并实现 onKeyShortcut()。框架调用此方法 当某个键与 Ctrl 键结合使用时。创建选项菜单时,您可以注册键盘 为每个 <item> 设置 android:alphabeticShortcutandroid:numericShortcut 属性。 元素(或使用 setShortcut())。
  • Android 3.0 包含一个 ID 为 KeyCharacterMap.VIRTUAL_KEYBOARD 的新“虚拟键盘”设备。虚拟键盘采用桌面版美国按键映射,非常适合合成按键事件以测试输入。

分屏触摸事件

之前,一次只能有一个视图接受轻触事件。Android 3.0 增加了对跨视图甚至跨窗口拆分触摸事件的支持,因此不同的视图可以接受同时发生的触摸事件。

当应用指向某个目标时,系统会默认启用拆分触摸事件 Android 3.0。也就是说,当应用设置了 android:minSdkVersion 或将 android:targetSdkVersion 属性的值设为 "11"

不过,您可以使用以下属性在特定视图组内的视图之间以及跨窗口停用分屏触摸事件。

  • 借助视图组的 android:splitMotionEvents 属性,您可以停用布局中子视图之间发生的分屏轻触事件。例如:
    <LinearLayout android:splitMotionEvents="false" ... >
        ...
    </LinearLayout>

    这样,线性布局中的子视图无法拆分触摸事件 - 只有一个视图可以拆分触摸事件 同时接收触摸事件。

  • 借助 android:windowEnableSplitTouch 样式属性,您可以将其应用于 activity 或整个应用的主题,以停用跨窗口的分屏触摸事件。例如:
    <style name="NoSplitMotionEvents" parent="android:Theme.Holo">
        <item name="android:windowEnableSplitTouch">false</item>
        ...
    </style>

    将此主题应用于 <activity><application> 时,系统仅接受当前 activity 窗口内的触摸事件。例如,通过停用分屏 多个窗口的触摸事件,系统栏无法与 活动。这不会影响 activity 内的视图是否可以拆分轻触 事件,默认情况下,Activity 仍可以在视图之间拆分触摸事件。

    如需详细了解如何创建主题,请参阅应用样式和主题

WebKit

浏览器

浏览器应用添加了以下功能来支持网络应用:

  • 媒体截取

    根据 HTML 媒体捕获的定义, 因此,“浏览器”允许 Web 应用访问音频、图片和视频 设备的功能。例如,以下 HTML 为用户提供了输入, 拍摄照片并上传:

    <input type="file" accept="image/*;capture=camera" />

    或者,通过排除 capture=camera 参数,用户可以选择 使用相机拍摄新图片或从设备(例如从“图库”应用程序中)中选择一张图片。

  • 设备方向

    设备屏幕方向事件定义 符合规范,则浏览器允许网络应用监听 DOM 事件,这些事件提供 与设备的物理方向和运动有关。

    设备方向通过 x 轴、y 轴和 z 轴表示,以度为单位,动作为 以加速度和旋转率数据表示。网页可以注册屏幕方向 以事件类型 "deviceorientation" 调用 window.addEventListener 以及通过注册 "devicemotion" 事件类型来注册动作事件。

  • CSS 3D 转换

    正如使用 CSS 3D Transform Module 规范进行转换,浏览器允许将 CSS 渲染的元素转换为 维度。

JSON 实用程序

新课程“JsonReader”和“JsonWriter”可以帮到你 读写 JSON 流。新 API 是对 org.json 类的补充,后者用于操控 在内存中保存文档

您可以通过调用JsonReader 其构造函数方法,并传递向 JSON 字符串提供数据的 InputStreamReader。 然后,通过调用 beginObject() 开始读取对象, 键名和 nextName(),使用方法读取值 (例如 nextString()nextInt()),然后在 hasNext() 为 true 时继续这样做。

您可以通过调用 JsonWriter 的构造函数并 传递相应的 OutputStreamWriter。然后以某种方式写入 JSON 数据, 与读取器类似,使用 name() 添加属性名称 以及适当的 value() 方法,以添加相应的 值。

这些类默认严格。每个类中的 setLenient() 方法会将其配置为更宽松地接受内容。这种宽松 解析模式还与 org.json 的默认解析器兼容。

新功能常量

<uses-feature> 清单元素应用于告知外部实体(例如 Google Play)应用所依赖的硬件和软件功能集。在此版本中,Android 添加了以下新常量,应用可以使用此元素声明这些常量:

  • "android.hardware.faketouch"

    声明此属性后,表示应用与提供模拟触摸屏(或更好的触摸屏)的设备兼容。如果设备提供模拟触摸屏,则其会为用户提供一个能够模拟部分触摸屏功能的用户输入系统。例如,驱动屏幕光标的鼠标或遥控器就是此类输入系统的一个示例。此类输入系统支持基本的轻触事件,例如按下、按上和拖动。不过,在模拟触摸设备上,更复杂的输入类型(例如手势、快速滑动等)可能更难实现或无法实现(多点触控手势绝对无法实现)。

    如果您的应用不需要复杂的手势,并且您不希望系统从具有模拟触摸屏的设备中过滤您的应用,则应使用 <uses-feature> 元素声明 "android.hardware.faketouch"。这样,您的应用将可供尽可能多的设备类型使用, 包括仅提供模拟触摸屏输入的设备。

    所有包含触摸屏的设备也支持 "android.hardware.faketouch",因为触摸屏功能是模拟触控功能的超集。因此,除非您确实需要触摸屏,否则应添加 <uses-feature> 元素以实现模拟触摸。

新权限

新平台技术

  • 存储空间
    • ext4 文件系统支持,用于启用板载 eMMC 存储。
    • FUSE 文件系统以支持 MTP 设备。
    • USB 主机模式支持,可支持键盘和 USB 集线器。
    • 支持 MTP/PTP
  • Linux 内核
    • 已升级到 2.6.36
  • Dalvik 虚拟机
    • 用于支持 SMP 并针对 SMP 进行优化的新代码
    • 对 JIT 基础架构进行了多项改进
    • 垃圾回收器改进: <ph type="x-smartling-placeholder">
        </ph>
      • 针对 SMP 进行了优化
      • 支持更大的堆大小
      • 对位图和字节缓冲区进行统一处理
  • Dalvik 核心库
    • 新的 NIO(现代 I/O 库)实现速度更快
    • 改进了异常消息
    • 整个过程中的正确性和性能修复

API 差异报告

如需详细了解 Android 3.0(API 级别 11)中的所有 API 变更,请参阅 API 差异报告

API 级别

Android 3.0 平台提供了更新后的框架 API 版本。Android 3.0 API 分配了整数标识符 - 11 - 即 存储在系统自身中。此标识符称为“API 级别”,可让系统在安装应用之前正确确定应用是否与系统兼容。

要在您的应用中使用 Android 3.0 中引入的 API,请执行以下操作: 您需要根据此 API 中提供的 Android 库 Android 3.0 SDK 平台。根据您的需求,您可能还需要向应用清单中的 <uses-sdk> 元素添加 android:minSdkVersion="11" 属性。如果您的应用仅设计为在 Android 2.3 及更高版本上运行, 声明该属性可防止在更早的 平台。

有关详情,请参阅什么是 API 水平?