Android學習路線(十九)支援不同裝置——支援不同(Android)平台版本
當最新的Android版本為你的應用提供著很棒的APIs時,你卻要在更多的裝置更新之前繼續支援老的系統版本。這篇課程如何在繼續支援低版本的系統的情況下使用新版本的進階API。
Platform Versions 儀表板展示了最新的活躍裝置上啟動並執行Android系統版本的分布,基於裝置訪問Google Play商店的次數。通常情況下,支援90%的活躍裝置同時使用最新版本作為target是一個好習慣。
貼士: 為了在不同的Android版本上提供最好的特性和功能,你應該在你的應用中使用Android Support Library ,它能夠允許你在老版本的系統上使用一些最近版本的APIs。
指定最小以及目標API層級
AndroidManifest.xml 檔案描述了你的應用的詳情以及它支援的系統版本。 特別的,minSdkVersion 和targetSdkVersion 屬性分別指定了應用最低相容的API層級以及你為應用所設計以及測試的最高API層級。
例如:
...
由於新版的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背景透明:
應用你的在/res/values/styles.xml中定義的自訂佈景主題:
要讓主題應用到整個應用中(所有的activity),在 元素中添加android:theme屬性: