弹出消息的新方式——Snackbar

前言

安卓学习的第一课应该就讲了安卓弹出消息Toast的使用,它能够简单快捷有效地以气泡方式提醒用户,但在MaterialDesign盛行的今天,Toast未免也太Low了,本文要讲的即是Toast的取代者——Snackbar。

Snackbar介绍

Snackerbar简单说就是用来取代Toast的,所以这里就不多说,放两张图大家自行体会。

Toast:

Toast截图

Snackbar:

Snackbar截图

使用CoordinatorLayout布局

首先Snackbar需要与View绑定在一起以便提供基本功能,至于View,首选CoordinatorLayout布局,这样能完全发挥Snacker的特性。
CoordinatorLayout布局是FrameLayout的超类,所以可以将FrameLayout直接替换为CoordinatorLayout,如果需要修改的布局不是FrameLayout,那么可以使用CoordinatorLayout来将其包裹住。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<android.support.design.widget.CoordinatorLayout
android:id="@+id/myCoordinatorLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">


<!-- Here are the existing layout elements, now wrapped in
a CoordinatorLayout -->

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">


<!-- …Toolbar, other layouts, other elements… -->

</LinearLayout>

</android.support.design.widget.CoordinatorLayout>

注意需要添加android:id属性

操作Snackbar

1.创建Snackbar对象并显示

1
Snackbar.make(viewId, stringId, duration).show;
  • viewId: Snackbar绑定的View资源ID
  • stringId: 需要显示的文字信息资源ID
  • duration: 显示时间长短

2.添加Action事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Snackbar mySnackbar = Snackbar.make(findViewById(R.id.myCoordinatorLayout),
R.string.email_archived, Snackbar.LENGTH_SHORT);
mySnackbar.setAction(R.string.undo_string, new MyUndoListener());
mySnackbar.show();

// 监听 实现View.OnClickListener
public class MyUndoListener implements View.OnClickListener{

&Override
public void onClick(View v) {


// Code to undo the user's last action
}
}

由于Snackbar显示的时间很短,所以不要设计让用户思考很久才能做决定的操作。