Material Design之Snackbar

基础篇-Snackbar的简单使用

在Metarial Design设计语言发布之前,对于用户提示,我们都是用Toast实现的。Snackbar可以完全代替Toast的功能,并且在此基础之上还添加了动作的处理

下面我们来看一下Snackbar是如何使用的

1、创建一个新的Android项目的时候,是不会主动添加design库的,这样就无法使用Snackbar。所以我们需要在gradle文件中添加一个android的design库的依赖

1
compile 'com.android.support:design:26.0.0-alpha1'

这里需要注意的是版本号的问题,因为现在新创建的项目的Activity都是继承的AppCompatActivity 所以这里的版本号需要与下面的版本号一致,

1
compile 'com.android.support:appcompat-v7:26.0.0-alpha1'

否则在编译的时候会报错。

接下来我们就可以在Activity中欢快的调用Snackbar了,调用的时候需要用一个控件容器去容纳Snackbar,Google官方推荐的是CoordinatorLayout,因为使用这个控件作为容器的时候,用户还可以通过向右滑动来移除Snackbar,其实使用CoordinatorLayout来作为控件容器的话,会在界面显示的优化上有很大的作用,这个我们以后讲到CoordinatorLayout这个控件的时候详细的说明,这里就一带而过了。

1
2
3
4
5
6
7
8
9
mButtonClick = (Button) findViewById(R.id.button_click);
mCoordinator = (CoordinatorLayout) findViewById(R.id.coordinator);
mButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(mCoordinator,"文件已经删除",Snackbar.LENGTH_LONG).show();
}
});

多个Snackbar的显示机制相较于Toast而言是由很大的改善的,Toast在多次点击显示的时候,会依次显示,直到多有的Toast全部显示完毕,但是Snackbar无论点击显示多少次,都会只显示最后一个,如果已经有一个Snackbar在显示的话,则会移除掉已经显示的Snackbar。

cmd-markdown-logo

这个是Snackbar最基本的用法,此外我们还可以对Snackbar添加一个Action

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mButtonClick = (Button) findViewById(R.id.button_click);
mCoordinator = (CoordinatorLayout) findViewById(R.id.coordinator);
mButtonClick.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(mCoordinator,"文件已经删除",Snackbar.LENGTH_LONG)
.setAction("Retry", new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(MainActivity.this, "点击Retry,我就出现了!", Toast.LENGTH_LONG).show();
}
})
.setActionTextColor(Color.RED)
.show();
}
});

添加了Action之后,Snackbar的右边就多出了一个按钮,点击这个按钮就可以添加我们想要执行的任务了,我们在这里只是想要弹出一个Toast就行了

cmd-markdown-logo

以上就是Snackbar的使用,还是很简单的,最后再来看一下Snackbar的各种属性设置以及方法的调用

方法或属性名 使用说明
Snackbar.LENGTH_LONG 长时间显示
Snackbar.LENGTH_LONG 段时间显示
Snackbar.LENGTH_INDEFINITE 无限期的显示,除非被关闭或者显示了另外一个Snackbar
setDuration(int duration) 设置Snackbar的显示时间,使用此方法设置了显示时间之后,make方法中的时间参数就失效了,以该方法定义的时间为准

Snackbar常用的一些属性和方法就是这些了

进阶篇-改变Snackbar中Message的字体颜色

欢迎大家指正!