虽然不断更新的android版本提供了更为强大的API,但是开发者在历史版本没有完全退出舞台之前继续保持自己的应用软件对其的完整支持。本章节介绍在使用最新的API的同时,继续支持历史版本的各项功能。
平台版本的公告栏会根据访问google play store的设备数量,定期更新各个版本应用分布情况。通常来讲,开发者应在对最新版本支持的基础上,保持对90%以上的设备上的版本的支持。
技巧:为了为多个版本提供最佳的特性和功能支持,开发者应该使用Android support library。Android support library能够让开发者在历史版本上使用更新的API。
AndroidManifest.xml用于描述应用软件的细节,并确定其支持的版本。<use-sdk>元素的minSdkVersion属性确定应用软件兼容的最低API级别,targetSdkVersion属性确定应用软件的最高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);
}
}
注意:Android系统在解析XML资源时,不被当前设备支持的XML属性将会被忽略,因此开发者不必担心使用了仅在新版本中支持的XML属性的应用软件在旧版本设备上运行会导致程序崩溃。例如,如果targetSdkVersion被设置成11,在Android 3.0及更高版本的系统上应用软件会自动包含action栏。为了往action栏添加目录项,需要在目录资源XML文件中使用类似android:showAsAction="ifRoom"语句。这样的操作即使在跨越不同版本的XML文件中也被认为是安全的,因为老版本的android系统会直接忽略showAsAction属性,而不用专门另外创建一个res/menu-v11/之类的资源目录。
android系统提供了通过用户感受体现不同系统版本的用户体验主题。这些主题在manifest文件中定义。通过使用这些内嵌的样式和主题,可以使应用软件的外观和操作跟最新版本Android系统保持一致。
使activity以对话框形式显示
<activity android:theme="@android:style/Theme.Dialog">
让activity拥有透明背景
<activity android:theme="@android:style/Theme.Translucent">
对activity使用自定义主题
<activity android:theme="@style/CustomTheme">
对整个应用软件(所有activity)应用同一主题,为<application>元素添加android:theme属性
<application android:theme="@style/CustomTheme">
样式创建和使用的更多详细信息,参见样式和主题。