支持不同的平台版本

虽然 Android 的最新版本通常为您的应用提供了很棒的 API,但您应该继续支持旧版本的 Android,直到更多设备更新。 本课将向您展示如何在继续支持旧版本的同时利用最新的 API。

使用 Android Studio 的 **新建项目** 向导查找运行每个 Android 版本的活动设备分布情况。 此分布基于访问 Google Play 商店的设备数量。 通常,我们建议支持大约 90% 的活动设备,同时将您的应用定位到最新版本。

**提示:** 为了在多个 Android 版本中提供最佳的功能,您应该在应用中使用 Android 支持库,这使您可以在旧版本中使用多个最新的平台 API。

指定最低和目标 API 等级

AndroidManifest.xml 文件描述了有关您的应用的详细信息,并标识其支持的 Android 版本。 具体来说,minSdkVersiontargetSdkVersion 属性是 <uses-sdk> 元素,用于标识您的应用兼容的最低 API 等级以及您设计和测试应用的最高 API 等级。

例如

<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
    <uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
    ...
</manifest>

随着 Android 新版本的发布,某些样式和行为可能会发生变化。 为了使您的应用能够利用这些变化并确保您的应用适合每个用户的设备的样式,您应该将 targetSdkVersion 值设置为与最新可用的 Android 版本匹配。

在运行时检查系统版本

Android 在 Build 常量类中为每个平台版本提供了一个唯一的代码。 在您的应用中使用这些代码来构建条件,确保仅当系统上存在这些 API 时才执行依赖于更高 API 等级的代码。

Kotlin

private fun setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        actionBar.setDisplayHomeAsUpEnabled(true)
    }
}

Java

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

**注意:**解析 XML 资源时,Android 会忽略当前设备不支持的 XML 属性。因此,您可以安全地使用仅在较新版本中支持的 XML 属性,而无需担心旧版本在遇到该代码时会发生故障。例如,如果您设置了 targetSdkVersion="11",您的应用程序将在 Android 3.0 及更高版本上默认包含 ActionBar。然后,若要向操作栏添加菜单项,您需要在菜单资源 XML 中设置 android:showAsAction="ifRoom"。这在跨版本 XML 文件中是安全的,因为较旧版本的 Android 会简单地忽略 showAsAction 属性(也就是说,您*不需要*在 res/menu-v11/ 中创建单独的版本)。

使用平台样式和主题

Android 提供了用户体验主题,可以让应用程序呈现与底层操作系统一致的外观和感觉。这些主题可以在清单文件中应用到您的应用程序。通过使用这些内置的样式和主题,您的应用程序将自然地随着每次新版本的发布而遵循最新的 Android 外观和感觉。

要使您的活动看起来像一个对话框

<activity android:theme="@android:style/Theme.Dialog">

要使您的活动具有透明背景

<activity android:theme="@android:style/Theme.Translucent">

要应用您在 /res/values/styles.xml 中定义的自定义主题

<activity android:theme="@style/CustomTheme">

要将主题应用于整个应用程序(所有活动),请将 android:theme 属性添加到 <application> 元素中

<application android:theme="@style/CustomTheme">

有关创建和使用主题的更多信息,请阅读 样式和主题 指南。