本文介绍了Material Design设计规范,包含的组件和示例应用等。
随着Android 5.0的发布,带来了新的Android UI设计规范。这些规范称为“material design”。本文专门讲解材料设计。
什么是Material Design?
什么是完全地”Material Design”?这很难有一个答案因为更新的范围太广了。一个具体的突出材料设计的应用将包括下面的元素:
1.充满活力的配色方案
2.更新过的图标
3.列表使用RecyclerView并且item使用CardViews
4.使用新的App Toolbar
5.使用CoordinatorLayout处理滚动行为
6.Floating Action Buttons
7.为触摸反馈添加水波纹动画
8.页面切换时使用共享元素变形过渡
9.View 的高度和阴影
10.更新过的对话框样式
这些只是实现材料设计中突出的几点。想要更深入的了解,请观看Yash Prabhu的 Material Design Primer或Nidhi Shah的Living in a Material World。
设计规范
这个新的框架对于Android应用界面包含几个改变并且Google强烈鼓励采用下面这些新的原则:
- Material Design Guidelines - 材料设计规范指南
- Material Design Docs - 材料设计概览
- Highly Simplified Material Design For Developers - 为开发者简化了规范
- Material Design for Developers - 材料设计开发指南
- Material Design Examples - 材料设计示例
- Material Palette - 很方便地获取材料设计规范颜色
- Material Design Icons - 标准的材料设计ICONs
使用这些材料,你能理解并在你自己的应用坚持这些规范。
示例代码
这有一些不同种类的材料设计最佳实践的应用包括:
- Plaid - 展示了Google的材料设计和动画
- Topeka - Google出品材料设计示例应用
- Google IO Schedule - Google出品现代Android UI示例应用
- Timber - 现代音乐播放器展示了很漂亮的材料设计
- Opengur - Android imgur viewer 展示了现代UI模型
- Slide - 材料设计的Reddit Android应用
- Awesome-MaterialDesign - 列出了受欢迎的材料设计类库和示例应用
希望这些示例应用能给你探索材料设计一个坚实的起点。
配置
当切换到新的材料设计主题,你并不能支持很多不能升级到Android 5.0的老设备。这就是Material Support Library存在的原因。
Google发布了一个方便的Material Design Checklist来确保你已经应用了必要的步骤符合材料设计规范。
引入Support Library
默认情况下,使用Android Studio创建的应用自动开启材料设计的支持。然而,我们之前的应用怎么办?我们应该怎样让它们支持材料设计?查看这个迁移指南。
Design Support Library
在2015年6月,Google发布了Design Support Library帮助简化使用大量的材料设计组件,包括抽屉导航,悬浮标签,悬浮按钮,snackbars和配合动作和滚动事件的新框架。跟随配置指南利用好这些新的UI组件。
修改应用主题
在values/styles.xml
文件中修改应用主题继承自Theme.AppCompat
并且应用材料设计颜色属性:
1 | <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
这些颜色和下图一一对应:
如果需要进一步自定义你也可以重写这些属性:
1 | <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> |
支持材料设计可用的Theme.Appcompat包括:Theme.AppCompat, Theme.AppCompat.Light, Theme.AppCompat.Light.DarkActionBar, Theme.AppCompat.DeviceDefault, Theme.AppCompat.DeviceDefault.Light, Theme.AppCompat.DeviceDefault.Light.DarkActionBar。
继承AppCompatActivity
AppCompatActivity
是FragmentActivity
的一个子类,因此从之前的支持库使用FragmentActivity
应该没什么问题:1
2
3public class HomeActivity extends AppCompatActivity {
// Implementation
}
使用ActionBar
关于怎样使用AppCompatActivity
配置ActionBar的兼容的更多细节请查看我们的ActionBar使用指南,包括修改所有的menu
文件使用app:showAsAction
而不是android:showAsAction
。
一旦你切换到AppCompatActivity
,你需要getSupportActionBar
访问ActionBar而不是getActionBar
:1
2getSupportActionBar.show(); // 正确
getActionBar.hide(); // 错误
除此之外,ActionBar的样式需要使用材料设计支持的样式修改而不是传统的ActionBar样式。
图标
随着Android 5.0的发布,在现代Android应用中为icon提升了视觉设计样式。Google为开发者提供了一些material design icons。你应该下载这个仓库并且获取有用的文件。
开源社区materialdesignicons icon网站也有大量的material icons。感谢support design library最近的更新,你可以导入这些icon作为可缩放的矢量图形(.svg
)文件,解决了为不同分辨率需要导入不同的图片文件。
对于Android 5.0之前的设备确保通过配置说明添加了vector drawable support。Material Design icons在Vector Drawable XML格式中已经可用,不同于.SVG文件。另外,你也可以下载.SVG文件,在res/drawable
文件夹上右击,选择Vector Asset
选项导入这些.svg
文件为Vector Drawable XML,其它任何drawable也可以用。
导航抽屉
看看Material Design Checklist你可能会发现需要修改抽屉为在toolbar之上状态条之下。这有一篇StackOverflow post说明了怎样实现这个。
查看导航抽屉指南教你一步一步实现导航抽屉。注意为了实现这个效果,你需要使用Toolbar替换ActionBar。
组件
RecyclerView
随着材料设计主题的到来,这有一个很灵活的方式显示item的列表叫RecyclerView,ListView
的精神继承者。
理论上我们仍可以使用这些组件,但Google推荐我们使用RecyclerView
。在RecyclerView vs. ListView 部分查看之间的区别。
CardView
Android 5.0引入了新的组件CardView很方便使用新的样式应用到list中的item。
CardView
可以被认为是一个圆角的带有基于设置高度的阴影的FrameLayout。最佳应用是当显示均匀的内容时作为ListView
或RecyclerView
的一部分。
Toolbar
随着材料设计主题的到来,ActionBar现在的精神继承者叫Toolbar。
Toolbar的操作替换原先的ActionBar,但它是直接被添加到布局文件并且可以在布局中被其它View替换。
Floating Action Buttons
Floating action buttons(or FAB)在activity或fragment中一个特殊的主要动作,可以跟随ActionBar移动在右下角悬浮在UI之上的圆形ICON。
FAB应该代表一个屏幕的主要动作。更多信息和FAB的使用情况可以在Google官方的设计规范中找到。
动画
注意材料设计动画是不兼容Android 5.0(API 21)之前的版本。更多细节查看兼容指南。
Ripple Animations
水波纹动画在用户和UI元素交互的点提供瞬时视觉确认。注意水波纹效果只会在Android 5.0及以上显示,之前的版本会高亮显示。
对于怎样在View和按钮上开启这个效果请查看我们的更详细的水波纹动画指南。
Shared Element Transitions
很多情况下从一个列表的item进入详情页面,在两个页面都有相同的元素。随着新的共享元素过渡系统的到来,我们可以过渡这些共享元素从一个Activity或Fragment到另一个创建更多连续性的视觉效果。
对于怎样开启这些漂亮的过渡查看我们的更详细的共享元素过渡指南。
Circular Reveal
揭露动画是Android L中新引入的动画,裁剪View的边界的动画。当显示或隐藏一组UI元素时揭露动画可以给用户提供视觉连续性。
这个动画经常用在悬浮按钮上,使用这个过渡出现在屏幕上。
Scrolling Animations
滚动效果也可以实现折叠或展开Toolbar或Header让主要内容区域作为用户滚动的空间。
样式
Elevation and Shadows
材料设计为UI元素引入了高度(elevation)的概念。高度(控制Z轴)决定了每个View投射的阴影。你可以在布局中声明设置高度,单位为dp
:
1 | <ImageView … |
这是效果:
你也可以在代码中使用getElevation()
或setElevation()
。对于自定义阴影或View的高度轮廓,查看阴影的官方指南。
动态配色
材料设计鼓励动态地使用颜色,尤其是当你应用含有丰富的图片时。新的Palette support library可以让你从一个图片中抽取一些颜色应用到UI样式为了看起来更搭。
对话框样式
如果你想让你的对话框看起来更Material化并且应用到Android的所有版本,你可以利用AppCompat库并且使用 alert dialogs。
参考
- http://android-developers.blogspot.ca/2014/10/material-design-on-android-checklist.html
- http://www.google.com/design/spec/material-design/introduction.html
- http://code.hootsuite.com/tips-and-tricks-for-android-material-support-library/
- http://code.hootsuite.com/tips-and-tricks-for-android-material-support-library-2-electric-boogaloo/
- http://android-developers.blogspot.com/2015/06/more-material-design-with-topeka-for_16.html
- https://github.com/lightSky/Awesome-MaterialDesign
- https://realm.io/news/360andev-yash-prabhu-practical-guide-material-design-android-ui/
- https://www.youtube.com/watch?v=-SxPDFnCmF0