儘管最新的Android版本經常會給的應用程式提供更好的API,但是你還是應該支援較舊的Android版本,一直到更多的裝置更新到新的Android平台。本節課向你介紹如何在利用最新的API的同時繼續支援較舊的版本。
定期更新的Platform Versions表顯示了運行每個Android版本裝置的發布情況,這個表中的資料是基於訪問Google
Play Store的裝置數量來統計的。通常,支援90%左右的活動裝置是一個比較好的選擇,同時你的應用程式還要支援最新的版本。
提示:為了提供更好的功能以及跨幾個Android版本的功能性,你應該在你應用程式中使用Android
Support Library,這樣就可以在較舊的版本上使用最接近的平台版本。
指定最小和目標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時才被執行。
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”,預設情況下,你的應用程式在Android3.0以上會包含ActionBar。如果要把功能表項目添加到操作欄,你需要在菜單資源XML中設定android:showAsAction=”ifRoom”。在跨版本的XML檔案中,這樣做是安全的,因為較舊的Android本表只是簡單的忽略showAsAction屬性(也就是說,你不需要一個單獨的res/menu-v11/目錄)
使用平台樣式和主題
Android提供了基於作業系統的外觀和感覺的使用者體驗主題。這些主題可以在資訊清單檔中使用。通過使用這些內建的樣式和主題,你的應用程式會自然的按照最新發行的Android的外觀和感覺來顯示。
讓你的Activity外觀像一個對話方塊:
<activityandroid:theme="@android:style/Theme.Dialog">
讓你的Activity有一個透明的背景:
<activityandroid:theme="@android:style/Theme.Translucent">
使用res/values/styles.xml中自訂的樣式:
<activityandroid:theme="@style/CustomTheme">
要讓一個主題應用於整個應用程式(程式中所有的Activity),就要把android:theme屬性添加到<application>元素中:
<applicationandroid:theme="@style/CustomTheme">
建立和使用主題的更多資訊,請讀樣式和主題指南。