Android Material design之Snackbars

一、什么是Snackbar

1、谷歌原话:Snackbar通过在屏幕底部显示一条简短的信息并提供一个轻量级操作反馈。Snackbar可以包含一个动作。跟Toast相似的是都可以在屏幕上显示信息提示,不同的是Snackbar可以包含一个动作(点击事件)。
2、屏幕上一次只能显示一个Snackbar,并且Snackbar只能包含0或1个动作,更像是轻量化的对话框。
3、谷歌推荐Snackbar和CoordinatorLayout结合使用,Snackbar能够响应CoordinatorLayout向右滑动的清除事件。

二、Snackbar的使用

布局的代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.xiaohu.app.snackbardemo.MainActivity">

    <android.support.design.widget.CoordinatorLayout  android:id="@+id/cl" android:layout_width="match_parent" android:layout_height="match_parent">

        <android.support.design.widget.FloatingActionButton  android:id="@+id/fab" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|right" android:layout_margin="@dimen/activity_horizontal_margin" android:src="@drawable/ic_plus" />
    </android.support.design.widget.CoordinatorLayout>
</RelativeLayout>

这里选取CoordinatorLayout作为Snackbar的容器。
生成Snackbar的具体代码如下:

Snackbar.make(cl, "这是一个Snackbar", Snackbar.LENGTH_INDEFINITE)
                        .setActionTextColor(getResources().getColor(R.color.colorAccent))
                        .setAction("确定", new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                Toast.makeText(MainActivity.this, "响应了Snackbar的点击事件", Toast.LENGTH_LONG).show();
                            }
                        })
                        .setCallback(new Snackbar.Callback() {
                            @Override
                            public void onDismissed(Snackbar snackbar, int event) {
                                fab.setClickable(true);
                                Toast.makeText(MainActivity.this, "Snackbar--onDismissed", Toast.LENGTH_LONG).show();
                            }

                            @Override
                            public void onShown(Snackbar snackbar) {
                                fab.setClickable(false);
                                Toast.makeText(MainActivity.this, "Snackbar--onShown", Toast.LENGTH_LONG).show();
                            }
                        })
                        .show();

Snackbar的生成方式与Toast类似,通过make静态方法来生成,该方法包含三个参数:
第一个参数:设置Snackbar的容器,即Snackbar在哪个View上显示;
第二个参数:设置显示的消息内容;
第三个参数:设置显示的时长,包含LENGTH_INDEFINITE(不会主动消失), LENGTH_SHORT, LENGTH_LONG。
setActionTextColor:设置动作文字的颜色;
setAction:设置动作,包含两个参数:一个是动作名称,一个是View.OnClickListener;
setCallback:设置Snackbar的回调,包含Snackbar显示时的回调和Snackbar消失时的回调;
show:显示Snackbar;
其它方法这里不再叙述了。
对Snackbar而言,除了make方法和show方法是必须的,其它的都是可选的;

以下是真机运行效果,注意观察FloatingActionButton的位置。

Android Material design之Snackbars_第1张图片

点击FloatingActionButton时,Snackbar从底部弹出并且FloatingActionButton自动往上移动了,不会造成按键遮挡,提供了很好的交互,这是Snackbar和CoordinatorLayout结合使用的优点之一。

Android Material design之Snackbars_第2张图片

Snackbar和CoordinatorLayout结合使用的优点之二:Snackbar可以向右滑动清除。

Android Material design之Snackbars_第3张图片

点击确定按钮或者向右滑动清除Snackbar,此时FloatingActionButton又回到了原来的位置

Android Material design之Snackbars_第4张图片

Snackbar的使用就介绍到这里了,Snackbar确实让人眼前一亮。

以下是本文的AndroidStudio源码:SnackbarDemo

你可能感兴趣的:(android,Snackbar)