这是来自 Google 官方的 Material Design 培训教程的翻译,受个人水平所限,难免有翻译不对的地方,欢迎交流指正。
某些 material design 特性如 material 主题以及自定义活动转场效果等只在 Android 5.0 ( API 21) 上可用。尽管如此,你依然可以设计的应用程序来使用这些特性,使之运行在支持 material design 的设备上时,能够兼容的在其他较早的 Android 发布版上运行。
定义可替代的风格
你可以配置应用程序在支持 material design 的设备上使用 material 主题,在运行较早期版本的 Android 设备上恢复为旧的主题:
- 在
res/values/styles.xml
中定义一个主题继承自旧的主题,如 Holo。 - 在
res/values-v21/styles.xml
中定义相同名称的主题继承自 material 主题。 - 在清单文件中设置这个主题为应用程序的主题。
注意:如果你的应用程序使用 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.xml
是 res/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 | <!-- extend one of the Theme.AppCompat themes --> |
列表和卡片
通过 Android Supprot V7 兼容库,RecyclerView 和 CardView 控件在早先的 Android 版本上是可用的,但具有如下局限:
- CardView 上的阴影需要使用额外的内边距来编程实现。
- 具有圆角的 CardView 无法裁剪其子视图。
依赖
在早于 Android 5.0 (API 21) 版本上使用这些特性需要在项目中通过 Gradle 依赖引入 Android Support V7 兼容库。
1 | dependencies { |
检查系统版本
以下特性在 Android 5.0 (API 21) 以上可用:
- 活动转场效果
- 触摸反馈
- 显示动画
- 基于路径的动画
- 矢量图片
- 图片着色
为了在早先 Android 版本上保持兼容性,需要中调用包含这些特性的 API 前检查系统版本。
1 | // 检查是否运行在 Android 5.0 以上版本 |
注意:在清单文件中使用
android:minSdkVersion
和android:targetSdkVersion
属性来指定 Android 应用程序支持哪些版本。在 Android 5.0 上使用 material design 特性,需要设置android:targetSdkVersion
属性为21
。更多信息,可以查看API 指南 。