当最新的Android版本为你的应用提供着很棒的APIs时,你却要在更多的设备更新之前继续支持老的系统版本。这篇课程如何在继续支持低版本的系统的情况下使用新版本的高级API。
Platform Versions 仪表板展示了最新的活跃设备上运行的Android系统版本的分布,基于设备访问Google Play商店的次数。通常情况下,支持90%的活跃设备同时使用最新版本作为target是一个好习惯。
贴士: 为了在不同的Android版本上提供最好的特性和功能,你应该在你的应用中使用Android Support Library ,它能够允许你在老版本的系统上使用一些最近版本的APIs。
指定最小以及目标API级别
AndroidManifest.xml 文件描述了你的应用的详情以及它支持的系统版本。 特别的,<use-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级别的代码。
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
。然后要为action
bar添加菜单项目,你需要在你的menu下的资源文件中设置android:showAsAction="ifRoom"
。在一个跨版本的XML文件中这样做也是完全没问题的,因为老版本的Android直接忽略了这个属性(这样的话,你就没有必要分开创建一个res/menu-v11/
目录)。
使用平台的样式和主题
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">
更多关于创建和使用主题,请参阅Styles and Themes向导。