前言
本文是 Material Design 系列第二篇:SnackBar 的提出实际上介于 Toast 和 Dialog 的中间产物,SnackBar 提供有关操作的轻量级反馈,它们在移动设备的屏幕底部显示一条简短消息。SnackBar 出现在屏幕上所有其他元素的上方,一次只能显示一个。
它们在超时后或在屏幕上其他位置的用户交互之后自动消失,特别是在召唤新的表面或活动的交互之后。
Snackbar 与 Toast 的主要区别是:Snackbar 可以滑动退出,也可以处理用户交互(点击)事件。
一、SnackBar 特征
- Snackbar 会在超时或者用户在屏幕其他地方触摸之后自动消失
- 可以在屏幕上滑动关闭
- 出现时不会阻碍用户在屏幕上的输入
- 屏幕上同时最多只能显示一个 Snackbar
- 可以在 Snackbar 中添加一个按钮,处理用户点击事件
- Snackbar 一般需要 CoordinatorLayout 来作为父容器,CoordinatorLayout 保证 Snackbar 可以右滑退出
二、SnackBar 方法介绍
以下整理 SnackBar 常用的 API 方法:
方法 | 介绍 |
---|---|
make(View view, CharSequence text, int duration) | 创建 SnackBar 以显示消息 |
setAction(int resId, View.OnClickListener listener) | 设置要在此显示的动作 |
setActionTextColor(ColorStateList colors) | 设置指定操作的文本颜色 |
setBackgroundTint(int color) | 设置背景 Drawable 的色调颜色 |
setCallback(Snackbar.Callback callback) | 添加回调方法 |
show() | 显示 SnackBar |
dismiss() | 隐藏 Snackbar |
getContext() | 获取父布局所使用的 Context |
isShown() | 判断当前 Snackbar 是否正在显示 |
isShownOrQueued() | 判断当前 Snackbar 是否正在显示或者已经添加到队列里 |
setDuration(int duration) | 设置消失时间 |
getView() | Snackbar 所对应的 SnackbarBaseLayout,自定义 Sanckbar 时需要使用 |
三、SnackBar 使用
Snackbar 基本上继承了和 Toast 一样的方法和属性,例如 LENGTH_LONG 和 LENGTH_SHORT 用于设置显示时长。
1、基础使用
Snackbar.make(view, message, duration).show();
参数:
-
view:Snacker 要设置一个 View,Snacker 就显示在该 View 上面
-
message:Snacker 左边显示是文字内容
-
duration:Snacker 显示的时间,
- Snackbar.LENGTH_SHORT// 短时间显示,然后自动取消
- Snackbar.LENGTH_LONG// 长时间显示,然后自动取消
- Snackbar.LENGTH_INDEFINITE// 不消失显示,除非手动取消
-
show():最后 Snaker 要加上这个才会显示
Snackbar.make(view, "提示:您有新消息", Snackbar.LENGTH_SHORT).show();
2、设置 SnackBar 文本颜色和背景颜色
Snackbar 的官方 API 只提供了 setActionTextColor()这个方法修改 Action 的文字颜色。在源码中我们看到 Snackbar 中定义了一个继承自 LinearLayout 的内部类 SnackbarLayo