尽管最新版本的 Android 经常会为您的应用提供强大的 API,但您还是应继续支持旧版 Android,直至更多设备更新到新版本。本课将介绍如何利用最新 API,同时继续为旧版 API 提供支持。
使用 Android Studio 的 New Project 向导查找搭载各 Android 版本的活跃设备的分布情况。此分布数据以访问 Google Play 商店的设备数量为依据。通常,我们建议支持约 90% 的活跃设备,同时将应用定位到最新版本。
提示:如需为多个 Android 版本提供最佳特性和功能,您应在应用内使用 Android 支持库,从而能够在旧版系统上使用一些最新的平台 API。
指定最低和目标 API 级别
AndroidManifest.xml 文件介绍了关于您应用的详细信息,并列出了其支持的 Android 版本。具体而言,<uses-sdk>
元素的 minSdkVersion
和 targetSdkVersion
属性分别表示您的应用兼容的最低 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 赋予类似对话框的外观,请使用以下主题:
<activity android:theme="@android:style/Theme.Dialog">
如需为您的 activity 赋予透明背景,请使用以下主题:
<activity android:theme="@android:style/Theme.Translucent">
如需应用您在 /res/values/styles.xml
中定义的自定义主题,请使用以下主题:
<activity android:theme="@style/CustomTheme">
如需将某个主题应用于您的整个应用(所有 activity),请为 <application>
元素添加 android:theme
属性:
<application android:theme="@style/CustomTheme">
如需详细了解如何创建和使用主题背景,请参阅样式和主题背景指南。