保持兼容性

阿里云产品限时红包,最高 ¥1888 元,立即领取

这是来自 Google 官方的 Material Design 培训教程的翻译,受个人水平所限,难免有翻译不对的地方,欢迎交流指正。

某些 material design 特性如 material 主题以及自定义活动转场效果等只在 Android 5.0 ( API 21) 上可用。尽管如此,你依然可以设计的应用程序来使用这些特性,使之运行在支持 material design 的设备上时,能够兼容的在其他较早的 Android 发布版上运行。

定义可替代的风格

你可以配置应用程序在支持 material design 的设备上使用 material 主题,在运行较早期版本的 Android 设备上恢复为旧的主题:

  1. res/values/styles.xml 中定义一个主题继承自旧的主题,如 Holo。
  2. res/values-v21/styles.xml 中定义相同名称的主题继承自 material 主题。
  3. 在清单文件中设置这个主题为应用程序的主题。

注意:如果你的应用程序使用 material 主题,但没有按照这种方式提供一个替代的主题,你的应用程序在早于 Android 5.0 版本上无法运行。

提供替代的布局

如果你所涉及的布局是按照 material design 指南,并且没有使用任何在 Android 5.0 (API 21) 上引入的新 XML 属性,那么在之前的 Android 版本也可以正常工作。否则,你需要提供一个可替换的布局。你可以提供可替代的布局来在早先的 Android 版本上自定义应用程序外观。

res/layout-v21 里为 Android 5.0 (API 21) 创建布局文件,在 res/layout 里为早先的 Android 版本创建替代的布局文件。例如: res/layout/my_activity.xmlres/layout-v21/my_activity.xml 的替代布局。

为了避免重复代码,在 res/values 中定义风格,为新的 API 修改 res/values-v21 中的风格。使用风格继承,在 res/values/ 定义基础风格,并在 res/values-v21 中继承它。

使用 Support Library

Support v7 兼容库 r21 及以上包含下面的 material design 特性:

  • 当你应用其中一个 Theme.AppCompat 主题时,某些系统组件具有 Material design 风格
  • Theme.AppCompat 主题中的 色彩调色板主题属性
  • 使用 RecyclerView 控件来显示数据集。
  • 使用 CardView 控件来创建卡片。
  • 使用 Palette 类来从图片中抽取主色彩。

系统控件

Theme.AppCompat 主题为以下控件提供了 material design 风格:

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

调色板

通过 Android Support V7 兼容库来获取 material design 风格和自定义调色板,需要应用一个 Theme.AppCompat 主题:

1
2
3
4
5
6
7
<!-- extend one of the Theme.AppCompat themes -->
<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>

列表和卡片

通过 Android Supprot V7 兼容库,RecyclerView 和 CardView 控件在早先的 Android 版本上是可用的,但具有如下局限:

  • CardView 上的阴影需要使用额外的内边距来编程实现。
  • 具有圆角的 CardView 无法裁剪其子视图。

依赖

在早于 Android 5.0 (API 21) 版本上使用这些特性需要在项目中通过 Gradle 依赖引入 Android Support V7 兼容库。

1
2
3
4
5
dependencies {
compile 'com.android.support:appcompat-v7:21.0.+'
compile 'com.android.support:cardview-v7:21.0.+'
compile 'com.android.support:recyclerview-v7:21.0.+'
}

检查系统版本

以下特性在 Android 5.0 (API 21) 以上可用:

  • 活动转场效果
  • 触摸反馈
  • 显示动画
  • 基于路径的动画
  • 矢量图片
  • 图片着色

为了在早先 Android 版本上保持兼容性,需要中调用包含这些特性的 API 前检查系统版本。

1
2
3
4
5
6
// 检查是否运行在 Android 5.0 以上版本
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// 在这里调用 material design API
} else {
// 实现不包含 material design 的特性
}

注意:在清单文件中使用 android:minSdkVersionandroid:targetSdkVersion 属性来指定 Android 应用程序支持哪些版本。在 Android 5.0 上使用 material design 特性,需要设置 android:targetSdkVersion 属性为 21。更多信息,可以查看 API 指南

原文:Maintaining Compatibility