Android相容不同的裝置之適配不同的系統版本
適配不同的系統版本
新的Android版本會為你的app提供更棒的APIs,但你的app仍應該支援舊版本的Android,直到更多的裝置升級到新版本為止。這節課程向你展示如何在利用新的APIs的同時仍支援舊版本Android。
Platform Versions的控制面板會定時更新,通過統計訪問Google Play Store的裝置數量,來顯示執行每個版本的安卓裝置的分佈。一般情況下,在更新你的app至最新Android版本時,最好先保證你的新版app可以支援90%的裝置使用。
Tip:為了能在幾個Android版本中都能提供最好的特性和功能,你應該在你的app中使用Android Support Library
,它能使你的app能在舊平臺上使用最近的幾個平臺的APIs。
指定最小和目標API級別
AndroidManifest.xml檔案中描述了你的app的細節,並且標明app支援哪些Android版本。具體來說,<uses-sdk元素中的minSdkVersion
和argetSdkVersion
屬性,標明在設計和測試app時,最低相容API的級別和最高適用的API級別。
例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion ="4" android:targetSdkVersion="15" />
...
</manifest>
隨著新版本Android的釋出,一些風格和行為可能會改變,為了能使你的app能利用這些變化,而且能適配不同風格的使用者的裝置,你應該設定targetSdkVersion
的值去匹配最新的可用Android版本。
在執行時檢查系統版本
Android在Build常量類中提供了對每一個版本的唯一代號,在你的app中使用這些代號可以建立條件,保證依賴於高級別的API的程式碼,只會在這些API在當前系統中可用時,才會執行。
private void setUpActionBar () {
// 保證我們是執行在Honeycomb或者更高版本時,才使用ActionBar APIs
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
Note:當解析XML資源時,Android會忽略當前裝置不支援的XML屬性。所以你可以安全地使用較新版本的XML屬性,而不需要擔心舊版本Android遇到這些程式碼時會崩潰。例如如果你設定
targetSdkVersion="11"
,你的app會在Android 3.0或更高時預設包含ActionBar。然後新增menu items到action bar時,你需要在你的menu XML資源中設定android:showAsAction="ifRoom"
。在跨版本的XML檔案中這麼做是安全的,因為舊版本的Android會簡單地忽略showAsAction
屬性(就是這樣,你並不需要用到res/menu-v11/
中單獨版本的檔案)。
使用平臺風格和主題
Android提供了使用者體驗主題,為app提供基礎作業系統的外觀和體驗。這些主題可以在manifest檔案中被應用於你的app中.通過使用內建的風格和主題,你的app自然地隨著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">
使整個app應用一個主題(全部activities)在元素中新增android:theme
屬性:
<application android:theme="@style/CustomTheme">