虽然最新版本的 Android 通常为您的应用提供强大的 API,但您应该继续支持旧版本的 Android,直到更多设备获得更新。本课程将向您展示如何在继续支持旧版本的同时利用最新 API。
使用 Android Studio 的**新建项目**向导查找运行每个 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 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">
有关创建和使用主题的更多信息,请阅读样式和主题指南。