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 包含新的资源限定符和新的清单属性,可让您更精确地控制应用在不同尺寸下的显示方式,而不是依赖于通用的尺寸类别。

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

API 概览

屏幕支持 API

Android 3.2 引入了支持新屏幕的 API,可让您更好地控制其应用在不同屏幕尺寸上的显示方式。此 API 基于现有的屏幕支持 API(包括平台的通用屏幕密度模型),但通过其尺寸精确定位特定屏幕范围的功能(以密度无关像素单位(例如 600dp 或 720dp 宽)为单位)而非通用屏幕尺寸(如大或特大)进行扩展,

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

  • 屏幕的 smallestWidth 是其基本的最小尺寸,以密度无关像素(“dp”)为单位。系统会选择屏幕高度或宽度中的较短者。对于纵向模式的屏幕,smallestWidth 通常基于其宽度,而在横向模式下,则基于其高度。在所有情况下,smallestWidth 均由屏幕的固定特性衍生而来,并且无论屏幕方向如何,该值都不会改变。smallestWidth 对应用而言非常重要,因为它表示需要绘制应用界面的可能最小宽度,不包括系统保留的屏幕区域。
  • 相比之下,屏幕的“宽度”和“高度”表示应用布局可用的当前水平或垂直空间,以“dp”为单位,不包括系统预留的屏幕区域。当用户在横向与纵向之间切换时,屏幕的宽度和高度会发生变化。

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

  • 新增资源限定符,用于将布局和其他资源定位为最小 smallestWidth、width、height 和
  • 新增了清单属性,用于指定应用的最大屏幕兼容性范围

此外,应用仍可像以前版本的平台一样查询系统并管理运行时的界面和资源加载。

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

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

类型 密度(通用) 尺寸 (dp) smallestWidth (dp)
Baseline 手机 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" - 通过此属性,您可以指定在无需兼容模式的情况下运行应用的最大 smallestWidth。如果当前屏幕大于指定的值,则系统会以普通模式显示应用,但允许用户选择通过系统栏中的设置切换到兼容模式。
  • android:largestWidthLimitDp="numDp" - 通过此属性,您可以指定运行应用的最大 smallestWidth。如果当前屏幕大于指定的值,系统会强制应用进入屏幕兼容模式,以确保在当前屏幕上获得最佳显示效果。
  • android:requiresSmallestWidthDp="numDp" - 通过此属性,您可以指定应用可在其上运行时的最小 smallestWidth。如果当前屏幕小于指定的值,系统会认为应用与设备不兼容,但并不阻止该应用安装和运行。

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

如需全面了解如何使用新属性,请参阅声明屏幕尺寸支持

屏幕兼容性模式

Android 3.2 为明确声明不支持与所运行屏幕一样大的屏幕的应用提供新的屏幕兼容性模式。这种新的“缩放”模式是像素缩放的,它会在较小的屏幕区域中渲染应用,然后缩放像素以填充当前屏幕。

默认情况下,系统会为需要屏幕兼容性模式的应用提供屏幕兼容性模式作为一个用户选项。用户可以使用系统栏中提供的控件开启和关闭缩放模式。

由于新的屏幕兼容性模式可能不适合所有应用,因此平台允许应用使用清单属性停用该模式。被应用停用后,系统不会在应用运行时向用户提供“缩放”兼容模式选项。

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

适用于 720p 电视和类似设备的新屏幕密度

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

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

一般而言,应用不需要处理这种密度。对于 720p 屏幕需要输出的情况,平台可以自动扩缩界面元素。

界面框架

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

媒体框架

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

显卡

IME 框架

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

USB 框架

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

网络

telephony

核心实用程序

新功能常量

平台添加了新的硬件功能常量,您可以在应用清单中声明这些常量,以便向 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 级别?