Android学习笔记:Material Design

Material Design于2014年的Google I/O 大会上推出,是由谷歌的设计工程师们基于传统优秀的设计原则,结合丰富的创意和科学技术所发明的一套全新的界面设计语言。在2015年的Google I/O 大会上推出了一个Design Support库,这个库将Material Design中最具代表性的一些控件和效果进行了封装,使得开发者在即使不了解Material Design的情况下也能非常轻松的将自己的应用Material化。

(1)CardView(卡片布局)
(2)Toolbar(标题栏)
(3)DrawerLayout(滑动菜单)
(4)NavigationView(滑动菜单界面)
(5)FloatingActionButton(悬浮按钮)
(6)Snackbar(提示工具)
(7)CoordinatorLayout(布局)
(8)AppBarLayout
(9)SwipeRefershLayout(下拉刷新)
(10)CollapsingToolbarLayout(可折叠标题栏)


一、CardView(卡片式布局)

Android 5.0 版本新增加了CardView,CardView继承自FrameLayout类,并且可以设置圆角和阴影,使得控件具有立体性,也可以包含其他的布局容器和控件,CardView是用于实现卡片式布局效果的重要控件。

	android.support.v7.widget.CardView

CardView具有如下几个重要属性:

  • card_view:cardCornerRadius,设置圆角的半径。
  • card_view:cardElevation,设置阴影的半径。
  • CardView_cardBackgroundColor,设置背景色。
  • CardView_cardElevation,设置Z轴阴影。
  • CardView_cardMaxElevation,设置Z轴最大高度值。
  • CardView_cardUseCompatPadding,是否使用CompadPadding。
  • CardView_cardPreventCornerOverlap,是否使用PreventCornerOverlap。
  • CardView_contentPadding,内容的padding。
  • CardView_contentPaddingLeft,内容的左padding。
  • CardView_contentPaddingTop,内容的上padding。
  • CardView_contentPaddingRight,内容的右padding。
  • CardView_contentPaddingBottom,内容的下padding。

CardViewDemo代码地址——Github地址:https://github.com/ambition-hb/CardViewDemo

项目示例图如下:
在这里插入图片描述


二、Toolbar(标题栏)

由于ActionBar设计的原因,被限定只能位于活动的顶部,从而不能实现一些Material Design的效果,因此官方已经不建议使用ActionBar了。而ToolBar的强大之处在于不仅继承了ActionBar的所有功能,而且灵活性很高,可以随处放置,可以配合其他控件来完成一些Material Design的效果。

 	android.support.v7.widget.Toolbar

我们可以添加有一些Action按钮来让Toolbar丰富一些,首先将图片资源放置到drawable中,然后右击res目录→New→Directory,创建一个menu文件夹。然后右击menu文件夹→New→Menu resource file,创建一个toolbar.xml文件。我们通过< item >标签来定义action按钮,android:id用于指定按钮的id,android:icon用于指定按钮的图标,android:title用于指定按钮的文字。接着使用app:showAsAction来指定按钮的显示位置,showAction主要有以下几种值可选:①always表示永远显示在toolbar中,如果屏幕空间不够则不显式;②ifRoom表示屏幕控件足够的情况下显示在Toolbar中,不够的话就显示在菜单中;③never表示永远显示在菜单中。(注意:Toolbar中的action按钮只会显示图标,菜单中的action按钮只会显示文字。)

ToolbarDemo代码地址——Github地址:https://github.com/ambition-hb/ToolbarDemo

项目示例图如下:
在这里插入图片描述


三、DrawerLayout(滑动菜单)

滑动菜单就是将一些菜单选项隐藏起来,而不是放置在主屏幕上,然后可以通过滑动的方式将菜单显示出来。这种方式既节省了屏幕空间,又实现了非常好的动画效果。Google提供了DrawerLayout控件来实现这个功能。

DrawerLayout是一个布局,在布局中允许放入两个直接子控件,第一个子控件是主屏幕中显示的内容,第二个子控件是滑动菜单中显示的内容。在第二个子控件中,layout_gravity这个属性是必须指定的,因为我们需要告诉DrawerLayout滑动菜单在屏幕的左边还是右边,指定left表示滑动菜单在左边,指定right表示滑动菜单在右边。而指定start表示会根据系统语言进行判断,如果系统语言是从左往右,比如英语、汉语,滑动菜单就在左边,如果系统语言是从右往左,比如阿拉伯语,滑动菜单就在右边。

Materail Design建议的做法是在Toolbar的最左边加入一个导航按钮,点击了按钮也会将滑动菜单的内容展示出来。这样就相当于给用户提供了两种打开滑动菜单的方式,防止一些用户不知道屏幕左侧是可以拖动的。

 	android.support.v4.widget.DrawerLayout

DrawerLayoutDemo代码地址——Github地址:https://github.com/ambition-hb/DrawerLayoutDemo

项目示例图如下:
在这里插入图片描述


四、NavigationView(滑动菜单界面)

NavigationView是Design Support库中提供的一个控件,它不仅是严格按照Material Design的要求来设计的,而且还可以将滑动菜单页面的实现变得非常简单。

	android.support.design.widget.NavigationView

NavigationViewDemo代码地址——Github地址:https://github.com/ambition-hb/NavigationViewDemo

项目示例图如下:
在这里插入图片描述


五、FloatingActionButton(悬浮按钮)

FloatingActionButton是Design Support库中提供的一个控件,这个控件可以帮助我们轻松的实现悬浮按钮的效果,它默认会使用colorAccent来作为按钮的颜色,还可以通过给按钮指定一个图标来表明这个按钮的作用是什么。

 	android.support.design.widget.FloatingActionButton

通过app:elevation属性来给FloatingActionButton设定一个高度值(悬浮高度),高度值越大,投影的范围也越大,但是投影效果越淡,高度值越小,但是投影效果越浓。

FloatingActionButtonDemo代码地址——Github地址:https://github.com/ambition-hb/FloatingActionButtonDemo

项目示例图如下:
在这里插入图片描述


六、Snackbar(提示工具)

Snackbar并不是Toast的替代品,它们两者之间有着不同的应用场景。Toast的作用是告诉用户现在发生了什么,用户只能被动的接收这个事情,因为没有什么办法能让用户进行选择。而Scackbar则在这方面进行了扩展,它允许在提示当中加入一个可交互按钮,当用户点击按钮的时候可以执行一些额外的逻辑操作。

可以调用Snackbar的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个View来自动查找最外层的布局,用于展示Snackbar。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长(与Toast类似)。

可以调用setAction()方法来设置Snackbar的动作,从而让Snackbar可以和用户进行交互。

SnackbarDemo代码地址——Github地址:https://github.com/ambition-hb/SnackbarDemo

项目示例图如下:
在这里插入图片描述


七、CoordinatorLayout(布局)

CoordinatorLayout是一个加强版的FrameLayout,在普通情况下的作用和FrameLayout基本一致,但是,CoordinatorLayout可以监听其所有子控件的各种事情,然后自动帮助我们做出最为合理的响应。比如:如果出现控件相互遮挡,CoordinatorLayout会帮助我们自动调整。


八、AppBarLayout

AppBarLayout实际上是一个垂直方向上的LinearLayout,他在内部做了很多滚动事件的封装,可以有效的解决控件遮挡问题(比如:RecyclerView遮挡Toolbar的问题)。

使用AppBarLayout的前提是它的根布局必须是CoordinatorLayout。换句话说,AppBarLayout必须是CoordinatorLayout的子布局。

当AppBarLayout接收到滚动事件的时候,它内部的子控件其实是可以指定如何去影响这些事件的,通过app:layout_scrollFlags属性就能实现。比如,我们在AppBarLayout中嵌套Toolbar,在Toolbar中添加一个app:layout_scrollFlags属性,并将属性的值指定为scroll|enterAlways|snap,其中,①scroll表示当RecyclerView向上滚动的时候,Toolbar会跟着一起向上滚动并实现隐藏;②enterAlways表示RecyclerView向下滚动的时候,Toolbar会跟着一起向下滚动并重新显示;③snap表示Toolbar还没有完全隐藏或显示的时候,会根据当前滚动的距离,自动选择是隐藏还是显示。此外,还有其他属性:④enterAlwaysCollapsed是对enterAlways的补充,当Scrolling View 向下滑动的时候,滑动View(也就是设置了enterAlwaysCollapsed 的View)下滑至折叠的高度,当Scrolling View 到达滑动范围的结束值的时候,滑动View剩下的部分开始滑动。这个折叠的高度是通过View的minimum height (最小高度)指定的。(要配合scroll|enterAlways 一起使用);⑤exitUntilCollapsed表示当Scrolling View 滑出屏幕时(也就是向上滑动时),滑动View先响应滑动事件,滑动至折叠高度,也就是通过minimum height 设置的最小高度后,就固定不动了,再把滑动事件交给 Scrolling view 继续滑动。

 	android.support.design.widget.AppBarLayout

AppBarLayoutDemo代码地址——Github地址:https://github.com/ambition-hb/AppBarLayoutDemo

项目示例图如下:
在这里插入图片描述


九、SwipeRefershLayout(下拉刷新)

SwipeRefershLayout是用于实现下拉刷新功能的核心类,是由support-v4库提供的。我们把想要实现下拉刷新功能的控件放置到SwipeRefershLayout中,就可以迅速让这个控件支持下拉刷新。

 	android.support.v4.widget.SwipeRefershLayout

SwipeRefershLayoutDemo代码地址——Github地址:https://github.com/ambition-hb/SwipeRefershLayoutDemo

项目示例图如下:
在这里插入图片描述


十、CollapsingToolbarLayout(可折叠标题栏)

CollapsingToolbarLayout可以让Toolbar的效果变得更加丰富,CollapsingToolbarLayout是不能独立存在的,它在设计的时候就被限定只能作为AppBarLayout的直接子布局来使用。而AppBarLayout又必须是CoordinatorLayout的子布局。

在布局CollapsingToolbarLayout中,除了id、layout_width、layout_height这几个属性外,还引入了(1)android:theme属性来指定一个主题;(2)app:contentScrim属性来指定CollapsingToolbarLayout在趋于折叠状态以及折叠之后的背景色,CollapsingToolbarLayout在折叠之后就是一个普通的Toolbar;(3)app:layout_scrollFlags属性来设置滑动的效果,其中,①scroll表示当RecyclerView向上滚动的时候,Toolbar会跟着一起向上滚动并实现隐藏;②enterAlways表示RecyclerView向下滚动的时候,Toolbar会跟着一起向下滚动并重新显示;③snap表示Toolbar还没有完全隐藏或显示的时候,会根据当前滚动的距离,自动选择是隐藏还是显示。此外,还有其他属性:④enterAlwaysCollapsed是对enterAlways的补充,当Scrolling View 向下滑动的时候,滑动View(也就是设置了enterAlwaysCollapsed 的View)下滑至折叠的高度,当Scrolling View 到达滑动范围的结束值的时候,滑动View剩下的部分开始滑动。这个折叠的高度是通过View的minimum height (最小高度)指定的。(要配合scroll|enterAlways 一起使用);⑤exitUntilCollapsed表示当Scrolling View 滑出屏幕时(也就是向上滑动时),滑动View先响应滑动事件,滑动至折叠高度,也就是通过minimum height 设置的最小高度后,就固定不动了,再把滑动事件交给 Scrolling view 继续滑动。

我们在CollapsingToolbarLayout中定义了一个ImageView和一个Toolbar,表示这个标题栏是由普通的标题栏加上图片组合而成的。在其中设置app:layout_collapseMode属性来指定当前控件在CollapsingToolbarLayout折叠过程中的折叠模式,有两种固定的模式:①pin,表示在折叠的过程中位置始终保持不变;②parallax,表示会在折叠的过程中产生一定的错位偏移。

 	android.support.design.widget.CollapsingToolbarLayout

CollapsingToolbarLayoutDemo代码地址——Github地址:https://github.com/ambition-hb/CollapsingToolbarLayoutDemo

项目示例图如下:
在这里插入图片描述


十一、未完待续

发布了199 篇原创文章 · 获赞 268 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/MaybeForever/article/details/102640681