Android可以適配不同的系統(tǒng)版本

2018-08-02 17:15 更新

編寫:Lin-H - 原文:http://developer.android.com/training/basics/supporting-devices/platforms.html

新的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è)備使用。

Tip:為了能在幾個(gè)Android版本中都能提供最好的特性和功能,應(yīng)該在我們的app中使用Android Support Library,它能使我們的app能在舊平臺(tái)上使用最近的幾個(gè)平臺(tái)的APIs。

指定最小和目標(biāo)API級(jí)別

AndroidManifest.xml文件中描述了我們的app的細(xì)節(jié)及app支持哪些Android版本。具體來(lái)說(shuō),<uses-sdk>元素中的minSdkVersiontargetSdkVersion 屬性,標(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版本匹配。

運(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);
    }
}

Note:當(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ú)版本的文件)。

使用平臺(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">

更多關(guān)于創(chuàng)建和使用主題,詳見Styles and Themes。


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)