天天看點

維護相容性

該文檔翻譯自 Android 5.0 文檔中對 Material Design 的介紹,原文位址:http://developer.android.com/training/material/compatibility.html

有些 Material Design 的特性像是 Material 主題和自定義 Activity 過渡隻在 Android 5.0(API level 21)及以上可用。然而,你可以配置你的應用,使其在支援 Material Design 的裝置上運作時可以使用這些特性,同時在之前釋出的 Android 版本上運作時仍然可以相容運作。

定義備選樣式

你可以設定你的應用在支援 Material Design 的裝置上使用 Material 主題 ,并且在運作早期版本的 Android 的裝置上恢複為舊的主題:

  1. 在 res/values/styles.xml 中定義一個主題,該主題繼承了一個舊主題(如 Holo)。
  2. 在 res/values-v21/styles.xml 中使用相同的名字定義一個主題,繼承 Material 主題。
  3. 在 manifest 檔案中設定該主題為你應用的主題。
注意:如果你的應用使用了Material主題但是沒有用上面的方式提供備選樣式,你的應用将不能在Android5.0之前的版本上運作。

提供備選布局

如果你根據 Material Design 指導設計的布局,沒有使用任何在 Android 5.0(API level 21)中引進的新的 XML 屬性,那麼它們可以在 Android 之前的版本中工作。否則,你需要提供備選布局。你還可以提供備選布局來定制你的應用在之前版本的 Android 上的外觀。

在 res/layout-v21/中建立為 Android 5.0(API level 21) 版本所使用的布局檔案,并在 res/layout/ 中建立為早期 Android 版本所使用的替代布局。例如,res/layout/my_activity.xml 是res/layout-v21/my_activity.xml 的替代布局。

要避免重複的代碼,請在 res/values/中定義你的基礎樣式,在res/values-v21/ 中繼承這些基礎樣式,并使用新 API 在 res/values-v21/中修改繼承後的樣式。

使用支援庫

v7 Support Libraries21 版本及以上包含了以下 Material Design 特性:

  • 當你應用了 Theme.AppCompat 主題的其中一個後會為一些系統元件應用Material design styles。
  • Theme.AppCompat 主題中的 Color palette(調色闆)主題屬性。
  • 用 RecyclerView 元件來顯示資料集合。
  • 用 CardView 元件來建立卡片。
  • 用 Palette 類來從圖檔中提取顯著色彩。

系統元件

Theme.AppCompat 主題為這些元件提供了 Material Design :

  • EditText
  • Spinner
  • CheckBox
  • RadioButton
  • SwitchCompat
  • CheckedTextView

調色闆(color palette)

要使用 Android V7 Support Libraray 擷取 Material Design 樣式并自定義調色闆,使用Theme.AppCompat 主題中的一個:

<!-- 繼承 Theme.AppCompat 主題中的一個 -->
<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">
    <!-- customize the color palette -->
    <item name="colorPrimary">@color/material_blue_500</item>
    <item name="colorPrimaryDark">@color/material_blue_700</item>
    <item name="colorAccent">@color/material_green_A200</item>
</style>
      

清單和卡片

RecyclerView和 CardView 元件可以通過 Android v7 Support Library 在低版本 Android 上使用,但會有這些限制:

  • CardView倒退到一個使用額外填充來達到程式設計陰影效果的實作版本。
  • CardView不再剪切與圓角相交的子視圖。

依賴

要在 Android 5.0(API level 21)版本之前使用這些特性,在你的項目中把 Android v7 Support Library 作為一個 Gradle 依賴包含進來:

dependencies {
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.android.support:cardview-v7:+'
    compile 'com.android.support:recyclerview-v7:+'
}
           

檢查系統版本

下面的特性隻能在 Android 5.0 (API level 21)及以上使用:

  • Activity 過渡
  • 觸摸回報
  • 波紋動畫
  • 基于路勁的動畫
  • 矢量圖像
  • 圖像染色

要在之前的 Android 版本保持相容性,在你調用上面這些特性的 API 之前都需要在 runtime 檢查系統版本:

// 檢查我們是否運作在 Android 5.0 或更高版本上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    // 在這裡調用一些 Material Design API
} else {
    // 不使用 Material Design 實作這些功能
}
      
注意:要為你的 Android 應用指定支援的版本,在你的 manifest 檔案中使用 android:minSdkVersion 和android:targetSdkVersion 屬性。要在 Android 5.0上使用 Material Design 特性,設定android:targetSdkVersion 屬性為 21.更多資訊,請檢視 <uses-sdk> API 文檔。

繼續閱讀