该文档翻译自 Android 5.0 文档中对 Material Design 的介绍,原文地址:http://developer.android.com/training/material/theme.html
新的 Material 主题提供了:
- 可以设置调色板(color palette)的系统组件
- 为系统组件增加了触摸反馈动画
- Activity 过渡动画
你可以根据你的品牌特性创建一个调色板(color palette),并使用该调色板对 Material 主题的外观进行自定义。你可以使用主题中的属性对 ActionBar 和 状态栏(status bar)进行染色,就像图例3展示的那样。
系统组件有了新的设计和反馈动画。你可以为你的应用自定义调色板(color palette),触摸反馈动画和 Activity 过渡。
Material 主题定义如下:
- @android:style/Theme.Material (dark version)
- @android:style/Theme.Material.Light (light version)
- @android:style/Theme.Material.Light.DarkActionBar
要获取你可以使用的 Material 样式表,查看 API 文档 R.style.
图例1.Dark Material theme
图例2.Light Material Theme
注意:Material 主题只能在 Android 5.0(APL level 21) 及以上使用。V7 Support Libraries为部分组件提供了 Material Design 样式的主题,和对自定义调色板(color palette)的支持。更多有关信息,请查看维护兼容性。
自定义调色板(Color Palette)
要对主题的基本色彩进行定制来适配你的品牌,需要继承 Material 主题并使用主题的属性定义你的自定义颜色:
<resources>
<!-- 继承 Material 主题 -->
<style name="AppTheme" parent="android:Theme.Material">
<!-- 主题主颜色 -->
<!-- 为应用栏(App Bar)应用你的品牌色 -->
<item name="android:colorPrimary">@color/primary</item>
<!-- 为状态栏(status bar)和上下文应用栏(contextual app bar)提供深色醒目色 -->
<item name="android:colorPrimaryDark">@color/primary_dark</item>
<!-- 对 checkboxes 和 text fields 的 UI 应用指定颜色-->
<item name="android:colorAccent">@color/accent</item>
</style>
</resources>
图例3.自定义Material主题
自定义状态栏(Status Bar)
Material 主题让你轻松自定义状态栏,所以你可以指定一个适合你的品牌,且与白色状态栏图标有着足够对比度的颜色作为状态栏(status bar)颜色。要为状态栏(status bar)设置一个自定义颜色,在继承了 Material 主题后使用android:statusBarColor 属性。默认情况下,android:statusBarColor 继承android:colorPrimaryDark 的值。
你也可以在状态栏后面自己进行绘制。例如,有时你想要使状态栏透明的显示在一张照片上,同时为了确保白色的状态栏图标可见而为状态栏添加一层细微的黑色渐变。若要这样做,设置android:statusBarColor 属性为@android:color/transparent,同时必须调整 Window flags。你还可以使用 Window.setStatusBarColor() 函数来实现动画或渐隐效果。
注意:状态栏应该几乎总是与主工具栏有一个明显的界限,除了在状态栏和主工具栏下面显示无边界图片或影音内容这类情况,此时你应该使用一个灰度以确保状态栏和主工具栏上的图标仍可以显示。
在你自定义导航(navigation bar)和状态栏(status bar)时,无论是使它们都变成透明或是只是修改状态栏(status bar)。导航栏(navigation bar)在所有情况下都应该保持黑色。
为个别视图指定主题
在 XML 布局定义中的元素可以使用 android:theme属性来引用一个主题资源,该属性会修改该元素和其所有子元素的主题,常用于改变一个接口中指定部分的主题调色板。