當最新的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嚮導。