新的Android版本會(huì)為我們的app提供更棒的APIs丸相,但我們的app仍應(yīng)支持舊版本的Android,直到更多的設(shè)備升級(jí)到新版本為止字币。這節(jié)課程將展示如何在利用新的APIs的同時(shí)仍支持舊版本Android耐亏。
Platform Versions的控制面板會(huì)定時(shí)更新转晰,通過(guò)統(tǒng)計(jì)訪問(wèn)Google Play Store的設(shè)備數(shù)量,來(lái)顯示運(yùn)行每個(gè)版本的安卓設(shè)備的分布桐磁。一般情況下悔耘,在更新app至最新Android版本時(shí),最好先保證新版的app可以支持90%的設(shè)備使用所意。
注:為了能在幾個(gè)Android版本中都能提供最好的特性和功能,應(yīng)該在我們的app中使用Android Support Library催首,它能使我們的app能在舊平臺(tái)上使用最近的幾個(gè)平臺(tái)的APIs扶踊。
1.指定最小和目標(biāo)API級(jí)別
AndroidManifest.xml文件中描述了我們的app的細(xì)節(jié)及app支持哪些Android版本。具體來(lái)說(shuō)郎任,<uses-sdk>元素中的minSdkVersion和targetSdkVersion 屬性秧耗,標(biāo)明在設(shè)計(jì)和測(cè)試app時(shí),最低兼容API的級(jí)別和最高適用的API級(jí)別(這個(gè)最高的級(jí)別是需要通過(guò)我們的測(cè)試的)舶治。例如:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ... >
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="15" />
...
</manifest>
隨著新版本Android的發(fā)布分井,一些風(fēng)格和行為可能會(huì)改變,為了能使app能利用這些變化霉猛,而且能適配不同風(fēng)格的用戶的設(shè)備尺锚,我們應(yīng)該將targetSdkVersion的值盡量的設(shè)置與最新可用的Android版本匹配。
2.運(yùn)行時(shí)檢查系統(tǒng)版本
Android在Build常量類中提供了對(duì)每一個(gè)版本的唯一代號(hào)惜浅,在我們的app中使用這些代號(hào)可以建立條件瘫辩,保證依賴于高級(jí)別的API的代碼,只會(huì)在這些API在當(dāng)前系統(tǒng)中可用時(shí)坛悉,才會(huì)執(zhí)行伐厌。
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);
}
}
注:當(dāng)解析XML資源時(shí),Android會(huì)忽略當(dāng)前設(shè)備不支持的XML屬性裸影。所以我們可以安全地使用較新版本的XML屬性挣轨,而不需要擔(dān)心舊版本Android遇到這些代碼時(shí)會(huì)崩潰。例如如果我們?cè)O(shè)置targetSdkVersion="11"轩猩,app會(huì)在Android 3.0或更高時(shí)默認(rèn)包含ActionBar卷扮。然后添加menu items到action bar時(shí),我們需要在自己的menu XML資源中設(shè)置android:showAsAction="ifRoom"均践。在跨版本的XML文件中這么做是安全的画饥,因?yàn)榕f版本的Android會(huì)簡(jiǎn)單地忽略showAsAction屬性(就是這樣,你并不需要用到res/menu-v11/中單獨(dú)版本的文件)浊猾。
3.使用平臺(tái)風(fēng)格和主題
Android提供了用戶體驗(yàn)主題抖甘,為app提供基礎(chǔ)操作系統(tǒng)的外觀和體驗(yàn)。這些主題可以在manifest文件中被應(yīng)用于app中葫慎。通過(guò)使用內(nèi)置的風(fēng)格和主題衔彻,我們的app自然地隨著Android新版本的發(fā)布薇宠,自動(dòng)適配最新的外觀和體驗(yàn).
使activity看起來(lái)像對(duì)話框:
<activity android:theme="@android:style/Theme.Dialog">
使activity有一個(gè)透明背景:
<activity android:theme="@android:style/Theme.Translucent">
應(yīng)用在/res/values/styles.xml中定義的自定義主題:
<activity android:theme="@style/CustomTheme">
使整個(gè)app應(yīng)用一個(gè)主題(全部activities)在元素中添加android:theme屬性:
<application android:theme="@style/CustomTheme">