Android 3.2 API

API 级别13

Android 3.2 (HONEYCOMB_MR2) 是一个增量平台版本,新增了 为用户和开发者提供各种实用功能以下部分简要介绍了相关内容 新功能和开发者 API。

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

平台亮点

新用户功能

  • 针对更多类型的平板电脑进行了优化

    Android 3.2 对整个系统进行了多项优化,以确保在更多类型的平板电脑设备上提供出色的用户体验。

  • 适用于固定尺寸应用的兼容性缩放功能

    Android 3.2 引入了一个新的兼容性缩放模式,可提供 为用户提供一种在大屏设备上查看固定尺寸应用的新方式。此新模式提供了 像素缩放的替代方案来替代标准界面拉伸, 这种广告适合在较大的屏幕尺寸(例如平板电脑)上投放。对于需要兼容性支持的应用,用户可以通过系统栏中的菜单图标访问新模式。

  • 从 SD 卡同步媒体

    在支持 SD 卡的设备上,用户现在可以直接加载媒体文件 从 SD 卡转移到使用这些文件的应用。借助系统工具 供应用从系统媒体库访问。

新的开发者功能

  • 支持用于管理屏幕的扩展 API

    Android 3.2 为平台的屏幕支持 API 引入了扩展,以便开发者能够通过其他方式管理各种 Android 设备上的应用界面。该 API 包含新的资源限定符和 清单属性,可让您更精确地 控制 应用以不同的尺寸展示 尺寸类别。

    为了确保固定大小的应用和对各种屏幕尺寸支持有限的应用能够获得尽可能最佳的显示效果,该平台还提供了一种新的缩放兼容模式,该模式会在较小的屏幕区域内渲染界面,然后将其放大以填充显示屏上的可用空间。如需详细了解屏幕支持 API 及其提供的控件,请参阅以下部分。

API 概览

屏幕支持 API

Android 3.2 引入了新的屏幕支持 API,可让您 控制其应用在不同尺寸屏幕上的显示方式。 该 API 基于现有的屏幕支持 API(包括平台的通用屏幕密度模型)构建而成,但扩展了该 API,使其能够根据屏幕尺寸(以不依赖于密度的像素单位 [例如宽度为 600dp 或 720dp] 衡量)而非通用屏幕尺寸(例如 large 或 xlarge)精确定位到特定屏幕范围

在设计应用界面时,您仍然可以依赖平台提供密度抽象,这意味着应用无需补偿不同设备之间实际像素密度的差异。您可以根据可用的水平或垂直空间量来设计应用界面。该平台使用三个新的 特性:smallestWidthwidthheight

  • 屏幕的 smallestWidth 是其基本最小尺寸, 以密度无关像素(“dp”)为单位进行测量。是屏幕的高度或宽度中较短的尺寸。对于纵向屏幕,smallestWidth 通常基于其宽度;对于横向屏幕,则基于其高度。在任何情况下,smallestWidth 都源自 且该值无论屏幕方向如何都不会改变。smallestWidth 对应用来说非常重要,因为它代表了可能的最短宽度, 需要绘制应用界面的位置,不包括屏幕区域 预留的资源。
  • 相比之下,屏幕的宽度高度则代表 应用布局当前可用的水平或垂直空间(测量尺寸) 以“dp”为单位广告单元,不包括系统预留的屏幕区域。宽度和 当用户在横向模式之间切换时,屏幕的高度会发生变化 和纵向。

新的屏幕支持 API 旨在让您管理应用界面 根据当前屏幕的 smallestWidth 定义。您还可以根据需要根据当前宽度或高度管理界面。为此,该 API 提供这些工具:

  • 用于将布局和其他资源定位到最小 smallestWidth、宽度或高度的新资源限定符,以及
  • 新的清单属性,用于指定应用的最大屏幕兼容性范围

此外,应用仍然可以查询系统并管理界面和 与之前的平台版本一样。

由于新 API 允许您通过 smallestWidth、width 和 height 更直接地定位屏幕,因此了解不同屏幕类型的典型特征会很有帮助。下表提供了一些示例,以“dp”为单位。

表 1. 典型设备,密度和尺寸以 dp 为单位。

类型 密度(通用) 尺寸 (dp) 最小宽度 (dp)
基准手机 mdpi 320x480 320
小屏平板电脑/大屏手机 mdpi 480x800 480
7 英寸平板电脑 mdpi 600x1024 600
10英寸平板电脑 mdpi 800x1280 800

以下部分详细介绍了新的屏幕限定符和清单属性。有关如何使用屏幕的完整信息 支持 API,请参阅支持多种 屏幕

新增了屏幕支持资源限定符

借助 Android 3.2 中的新资源限定符,您可以更好地针对屏幕尺寸范围定位布局。您可以使用这些限定符创建针对特定最小 smallestWidth、当前宽度或当前高度(以密度无关像素为单位)而设计的资源配置。

新限定符如下:

  • swNNNdp - 指定将要加载的最小 smallestWidth 应该使用的资源(以“dp”为单位)单位。如上所述,无论屏幕方向如何,其 smallestWidth 都是常量。示例: sw320dpsw720dpsw720dp
  • wNNNdphNNNdp - 指定资源应使用的最小宽度或高度(以“dp”为单位)。如上所述,屏幕的宽度和高度与屏幕的方向相关,并且每当屏幕方向发生变化时都会发生变化。示例:w320dpw720dph1024dp

您还可以根据需要创建多个重叠的资源配置。例如,您可以标记一些资源,以便在宽度超过 480 的任意屏幕中使用 dp,其他用于宽度大于 600 dp,其他用于宽度大于 720 dp。如果多个资源配置都符合给定屏幕的条件,系统会选择最接近的配置。为了精确控制 指定屏幕上会加载哪些资源,则可使用一个 限定符,也可以结合使用多个新的或现有的限定符。

下面根据前面列出的典型维度,举例说明了如何使用新限定符:

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

旧版本的平台将忽略新的限定符,因此您可以 请根据需要进行混合,以确保您的应用在任何设备上都能完美呈现。下面是一些示例:

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

如需详细了解如何使用新限定符,请参阅使用新的尺寸限定符

用于屏幕尺寸兼容性的新清单属性

该框架提供了一组新的 <supports-screens> 清单属性,可让您管理应用对不同屏幕尺寸的支持。具体而言,您可以指定应用设计为在哪些最小和最大屏幕上运行,以及应用设计为在哪些最大屏幕上运行时无需使用系统的新屏幕兼容性模式。与上述资源限定符一样,新的 清单属性指定应用支持的屏幕范围, 通过 smallestWidth 指定

用于支持屏幕的新清单属性包括:

  • android:compatibleWidthLimitDp="numDp" - 这 属性可以指定 无需兼容模式即可运行如果当前屏幕大于指定的值,系统会在正常模式下显示应用,但允许用户通过系统栏中的设置选择切换到兼容模式。
  • android:largestWidthLimitDp="numDp" - 通过此属性,您可以指定应用支持的最小 smallestWidth 值。如果当前屏幕大于指定的值,系统会强制应用进入屏幕兼容模式,以确保在当前屏幕上获得最佳显示效果。
  • android:requiresSmallestWidthDp="numDp" - 这 属性可指定应用所需的最小 smallestWidth 运行。如果当前屏幕小于指定的值,系统会认为应用与设备不兼容,但不会阻止安装和运行该应用。

注意:Google Play 目前不会根据上述任何属性过滤应用。将支持过滤功能 在后续平台版本中添加的功能。需要 根据屏幕尺寸进行过滤可以使用现有的 <supports-screens> 属性。

有关如何使用新属性的完整信息,请参阅声明 屏幕尺寸支持

屏幕兼容模式

Android 3.2 为明确声明不支持与其运行设备屏幕尺寸一样大的屏幕的应用提供了一种新的屏幕兼容模式。这个新的“缩放”功能模式就是像素缩放, 在较小的屏幕区域内渲染应用,然后将像素调整为 填满当前屏幕。

默认情况下,系统会为应用提供屏幕兼容性模式作为用户选项 所需的资源。用户可以使用可用的控件来开启或关闭缩放模式 。

因为新的屏幕兼容性模式未必适合 则平台允许应用使用清单将其停用 属性。当应用停用此功能时,系统不会在应用运行时向用户提供“缩放”兼容模式选项。

注意:如需了解如何在应用中控制兼容性模式的重要信息,请参阅 Android 开发者博客上的适用于大屏设备的应用的新模式一文。

针对 720p 电视和类似设备新增了屏幕密度

为了满足在 720p 电视或类似电视设备上运行的应用的需求, Android 3.2 引入了一种新的广义密度, tvdpi,约为 213 dpi。应用可以查询 densityDpi 中的新密度,并且可以使用 新的 tvdpi 限定符,用于标记电视资源和 类似设备。例如:

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

一般情况下,应用应该不需要使用此密度。特殊情况 当需要输出 720p 的屏幕时,可以缩放界面元素 由平台自动管理

界面框架

  • fragment <ph type="x-smartling-placeholder">
      </ph>
    • 新的 Fragment.SavedState 类用于保存状态 从 fragment 实例检索到 saveFragmentInstanceState()
    • 新方法 saveFragmentInstanceState() 会保存给定 fragment 的当前实例状态。此状态稍后可在创建新实例时使用 与当前状态匹配的 Fragment 的
    • 新方法 setInitialSavedState() 用于设置首次构建 Fragment 时的初始保存状态。
    • 新的 onViewCreated() 回调方法会在任何已保存状态恢复到视图中之前通知 fragment onCreateView() 已返回。
    • isDetached() 方法用于确定 Fragment 是否已明确与界面分离。
    • 借助新的 attach()detach() 方法,应用可以在界面中重新附加或分离 fragment。
    • 新的 setCustomAnimations() 重载方法可让您设置特定动画 为进入/退出操作而运行的资源,特别是在 弹出返回堆栈现有实现未考虑 ,以了解 fragment 在弹出返回堆栈时的不同行为。
  • ActivityInfo 和 ApplicationInfo 中的屏幕尺寸信息 <ph type="x-smartling-placeholder">
  • 用于从 WindowManager 获取显示屏尺寸的帮助程序 <ph type="x-smartling-placeholder">
  • 新的公开“全息”样式
    • 该平台现在为文本、ActionBar Widget 和标签页等提供了各种公共“全息”样式。如需查看完整列表,请参阅 R.style
  • LocalActivityManagerActivityGroupLocalActivityManager 现已废弃
    • 新应用应使用 Fragment 而非这些类。接收者 继续在旧版本平台上运行,您可以使用 v4 支持 库(兼容性库),在 Android SDK 中提供。v4 支持库提供的 Fragment API 版本向下兼容 Android 1.6(API 级别 4)。
    • 对于针对 Android 3.0(API 级别)开发的应用 11) 或更高版本,则通常使用新的新版 API 在界面中呈现标签页 ActionBar.newTab() 和相关 API 用于将标签页放置在操作栏区域内。

媒体框架

  • 使用平台媒体提供程序 (MediaStore) 的应用现在可以直接从 可拆卸 SD 卡(如果设备支持)。应用还可以 使用 MTP API 直接与 SD 卡文件交互

图形

IME 框架

  • 新增了 getModifiers() 方法: 检索辅助键的当前状态。

USB 框架

  • 用于检索设备的原始 USB 描述符的新 getRawDescriptors() 方法。您可以使用 方法,即通过更高级别的 API 访问不支持的描述符, 级别 API。

网络

电话

核心实用程序

新功能常量

该平台添加了新的硬件功能常量,您可以在应用清单中声明这些常量,以向 Google Play 等外部实体告知所需的硬件和软件功能。您可以在 <uses-feature> 清单元素中声明这些和其他功能常量。

Google Play 会根据应用的 <uses-feature> 属性对其进行过滤,以确保应用仅可供符合其要求的设备使用。

  • 针对横向或纵向要求的功能常量

    Android 3.2 引入了新的功能常量,允许应用指定其是需要横向显示、纵向显示还是两者均需显示。声明这些常数表示应用不得安装在不提供相关屏幕方向的设备上。反之,如果未声明其中一个或两个常量,则表示应用对未声明的屏幕方向没有偏好,并且可能会安装在不提供这些屏幕方向的设备上。

    通常,在横屏和竖屏模式下都能正常运行的典型应用无需声明屏幕方向要求。相反,主要针对一种屏幕方向设计的应用(例如针对电视设计的应用)可以声明其中一个常量,以确保不提供该屏幕方向的设备无法使用它。

    如果清单文件中声明的任何 activity 以特定屏幕方向运行, android:screenOrientation 属性,那么这也声明了应用 需要该方向

  • 其他特征常量

API 差异报告

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

API 级别

Android 3.2 平台提供了 框架 API。Android 3.2 API 会被分配一个整数标识符(13),该标识符存储在系统本身中。此标识符称为“API 级别”,可让系统在安装应用之前正确确定应用是否与系统兼容。

如需在应用中使用 Android 3.2 中引入的 API,您需要针对 Android 3.2 SDK 平台中提供的 Android 库编译应用。根据您的需求,您可能还需要向应用清单中的 <uses-sdk> 元素添加 android:minSdkVersion="13" 属性。

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