天天看点

维护兼容性

该文档翻译自 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 文档。