Android Material Design 系列之 Snackbar 使用详解

article/2025/9/18 17:03:30

前言

本文是 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 的内部类 SnackbarLayout,Snackbar 的样子就是由这个 SnackbarLayout 实现的。

  • 通过 findViewById(R.id.snackbar_text)找到 SnackBar 的 id,然后强转 TextView,调用 setTextColor()方法就可以完成字体颜色设置。

  • snackbar.getView()获取到 SnackBar 背景布局 View,调用 setBackgroundColor 完成背景颜色设置。

Snackbar snackbar = Snackbar.make(view, "提示:您有新消息", Snackbar.LENGTH_SHORT);
View snackbarView = snackbar.getView();
if (snackbarView != null) {snackbarView.setBackgroundColor(Color.GRAY);((TextView) snackbarView.findViewById(R.id.snackbar_text)).setTextColor(Color.YELLOW);
}
snackbar.show();

3、设置 setAction

setAction(CharSequence text, final OnClickListener listener)

参数:

  • text 设置 SnackBar 右侧文本
  • listener 设置右侧文本点击事件
Snackbar.make(view, "提示:您有新消息", Snackbar.LENGTH_SHORT)//设置Action,右边一个按钮.setAction("确定", click -> {Toast.makeText(SnackBarActivity.this,"Open Message",Toast.LENGTH_SHORT).show();}).show();

以上案例给 Action 设置点击事件,弹出一个 Toast,效果如下:

4、设置 setAction 文本颜色

setActionTextColor(int color)

参数:

  • color:设置文本字体颜色
Snackbar.make(view, "提示:您有新消息", Snackbar.LENGTH_SHORT)//设置Action,右边一个按钮.setAction("确定", click -> {})//设置Action文本颜色.setActionTextColor(Color.YELLOW).show();

5、设置 SnackBar 监听事件

addCallback(BaseTransientBottomBar.BaseCallback<B> callback)

SnackBar 的回调中有个 onshow()和 onDismissed()两个重要的方法。

  • 一个是显示的时候调用
  • 一个是消失的时候调用
Snackbar.make(view, "提示:您有新消息", Snackbar.LENGTH_SHORT)//设置Action,右边一个按钮.setAction("确定", click -> {})//添加SnackBar监听事件.addCallback(new Snackbar.Callback() {@Overridepublic void onShown(Snackbar sb) {super.onShown(sb);Toast.makeText(SnackBarActivity.this,"onShown",Toast.LENGTH_SHORT).show();}@Overridepublic void onDismissed(Snackbar transientBottomBar, int event) {super.onDismissed(transientBottomBar, event);Toast.makeText(SnackBarActivity.this,"onDismissed",Toast.LENGTH_SHORT).show();}}).show();

onDismissed()方法中的 event 事件有 5 种

  1. 滑动消失的时候调用

    public static final int DISMISS_EVENT_SWIPE=0;

  2. 点击 Action 消失的时候调用

    public static final intDISMISS_EVENT_ACTION=1;

  3. 超时消失的时候调用

    public static final intDISMISS_EVENT_TIMEOUT=2;

  4. 手动调用 dismiss()方法时调用

    public static final intDISMISS_EVENT_MANUAL=3;

  5. 一个新的 SnackBar 出现的时候调用

    public static final intDISMISS_EVENT_CONSECUTIVE=4;

四、Snackbar 与 Dialog 和 Toast 的比较

Dialog

模态对话框。也就说,此刻该对话框中的内容获取了焦点,想要操作对话框以外的功能,必须先对该对话框进行响应。
应用场景:对于删除确认、版本更新等重要性提示信息,需要用户做出选择的情况下,使用 Dialog。

Toast

非模态提示框。也就说提示框的显示并不影响我们对其他地方的操作,Toast 无法手动控制隐藏,需要设置 Toast 的显示时长,一旦显示时间结束,Toast 会自动消失。如果多次点击并显示 Toast,就会出现 Toast 重复创建并显示,给用户造成一种 Toast 长时间不隐藏的幻觉。
应用场景:对于无网络提示、删除成功、发布操作完成等这类不重要的提示性信息,使用 Toast。

Snackbar

Snackbar 和 Toast 比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar 使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。
应用场景:删除操作时,弹出 Snackbar 用于确认删除操作;消息发送失败时,弹出 Snackbar,用于重新发送操作;当然重要的是与 MD 组件相结合,用户体验效果更佳。

源码下载 源码包含 Material Design 系列控件集合,定时更新,敬请期待!

五、总结

SnackBar 效果比 Toast 美观的多,Material Design 系列的控件大多都是模仿 ios 的原生效果,所以现在好多项目应该都已经采用 SnackBar 来取代 Toast 了吧,本文对 SnackBar 的使用方法已经讲解的很详细了,源码中作者日常开发中整理了一个 SnackBarUtils 工具类,欢迎下载源码使用。希望看完本篇文章对你学习 SnackBar 有所帮助。

欢迎点评,诚邀 Android 程序员加入微信交流群,加我微信备注拉你入群:Jaynm888


http://chatgpt.dhexx.cn/article/VQNFuKVK.shtml

相关文章

Android中Snackbar的介绍以及使用

Android中Snackbar的介绍以及使用 介绍 Snackbar可以说是Toast的升级版&#xff0c;不仅有显示信息的功能&#xff0c;还可以添加一个Action&#xff0c;实现点击功能&#xff0c;可以右滑删除。 效果图 Snackbar是Android Support Design Library库支持的一个控件&#xff0c…

安卓之SnackBar

SnackBar SnakeBar与Toast相似&#xff0c;不过SnakeBar可以与用户进行交互。 不过首先需要在app/bulid.gradle中添加一句依赖&#xff0c;操作方法如下 点击这个灯泡&#xff0c;选择Add Library dependency然后添加下面的依赖 implementation com.android.support:design:2…

使用Snackbar!——Android Snackbar花式使用指南

使用Snackbar!——Android Snackbar花式使用指南 本文是在《Design Support Library第三部分&#xff1a;Snackbar样式》和《Snackbar使用及其注意事项》两篇文章的启发下而来&#xff0c;首先对两篇文章的作者表示感谢。 Snackbar是Android Support Design Library库中的一个控…

Android 中的自定义 Snackbar

前言 Snackbars 在 Android 应用程序中很常见。几乎每个应用程序都使用 Snackbars 来显示有关应用程序中正在发生的事情的一些信息。您可以将 Snackbar 视为 Android 中 Toasts 的替代品或更好的版本。 默认情况下&#xff0c;Snackbar 显示在屏幕底部&#xff0c;它出现在屏…

Snackbar的使用

最近看到Material Design中的Snackbar&#xff0c;跟Toast很相似。似乎效果比原生的Toast好写(当然我们也可以自定义Toast成Snackbar的效果)&#xff0c;至于Snackbar特别深入的定制目前了解甚少&#xff0c;所以这里简单记录一下常用的。 效果图 下面看一下效果 这里面加了个…

Android Snackbar控件

1. Snackbar类 Snackbar是5.0版本出现的控件&#xff0c;类似于Toast&#xff0c;显示在屏幕的底部&#xff0c;包含文字信息与一个可选的操作按钮。需要添加Design依赖库&#xff0c;并且使用Theme.AppCompat主题。 2. 创建Snackbar类 Snackbar利用静态方法make()来创建实…

Android Snackbar简单解析

偶然间发现android中有Snackbar类&#xff0c;还是有点意思&#xff0c;类似于toast。与toast相比&#xff0c;最明显的区别是:Snackbar只能在屏幕底部显示。其他用法基本与toast相似。 先来张效果图吧&#xff0c;静态图&#xff1a; 大概的用法呢&#xff1f;&#xff1a; S…

android Snackbar新控件解析

Dialog和Toast&#xff0c;我们在日常的开发中一定非常熟悉&#xff0c;常常被用来作为Android应用内提示性信息的两种展示方式。然而Google在Design包中又提供了一种新的选择&#xff0c;那就是Snackbar。今天主要介绍Snackbar新控件的使用&#xff0c;以及三种提示信息展示方…

android开发之SnackBar的使用

SnackBar是一个类似于Toast的东西&#xff0c;它也有显示时长&#xff0c;但是比Toast更加灵活&#xff0c;同时&#xff0c;我们还可以给SnackBar设置点击事件&#xff0c;那么我们今天就来看看怎么用吧&#xff01; 先来一张效果图&#xff1a; 这种效果大家可能在一些App中…

Snackbar-Android M新控件

概述 查看官方API Snackbar 是 Android design support library 中的另一个组件。使用 Snackbar&#xff0c;可以在屏幕底部快速的显示一条消息&#xff0c;大体与 Toast 相同&#xff0c;但多了几分灵活性&#xff1a; 一小段时间之后、或者用户与屏幕触发交互&#xff0c;S…

Android Snackbar使用方法及小技巧-design

Snackbar和Toast相似&#xff0c;都是为了给用户提供交互信息&#xff0c;Snackbar是固定在底部的&#xff0c;显示时从下往上滑出 要使用Snackbar&#xff0c;需要在项目的build.gradle中添加依赖 dependencies {compile com.android.support:design:23.4.0 } Snackbar的使用…

Android 快别用Toast了,来试试Snackbar

&#x1f525; 应用场景 Toast提示默认显示在界面底部&#xff0c;使用Toast.setGravity()将提示显示在中间&#xff0c;如下&#xff1a; Toast toast Toast.makeText(this, str, Toast.LENGTH_SHORT);toast.setGravity(Gravity.CENTER, 0, 0);toast.show();运行在在Android …

Android---简易Snackbar

目录 Snackbar 简介 Snackbar 特性 完整Demo Snackbar 简介 Snackbar 是 Android5.0 新特性---Material Design 中的一个控件&#xff0c;用来代替 Toast。Snackbar 就是一个类似 Toast 的快速弹出消息提示的控件&#xff0c;手机上显示在底部&#xff0c;大屏幕设备显示在左…

Android Snackbar基本使用

概述 Snackbar 是 Android 5.0 新特性——Material Design 中的一个控件&#xff0c;用来代替 Toast &#xff0c;Snackbar与Toast的主要区别是&#xff1a;Snackbar可以滑动退出&#xff0c;也可以处理用户交互&#xff08;点击&#xff09;事件。 样式 使用 Snackbar需要配…

Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?

转载请注明出处&#xff1a;http://blog.csdn.net/guolin_blog/article/details/51336415 本文同步发表于我的微信公众号&#xff0c;扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注&#xff0c;每天都有文章更新。 今天给大家带来一篇简单易懂的微技巧文章&#xff0c;并没…

Android开发——Snackbar使用详解

Snackbar是Android支持库中用于显示简单消息并且提供和用户的一个简单操作的一种弹出式提醒。当使用Snackbar时&#xff0c;提示会出现在消息最底部&#xff0c;通常含有一段信息和一个可点击的按钮。下图是Gmail中删除一封邮件时弹出的Snackbar&#xff1a; 在上图中&#xf…

Android Snackbar的使用

在项目中肯定有不少地方用到Toast&#xff0c;但是在项目各种各样的需求上&#xff0c;Toast已经不能满足我们的需求了。 其实google在Android 5.0的时候就推出了Snackbar&#xff0c;它算是Toast的一个进阶控件。 它是Material Design中的一个控件&#xff0c;与Toast的最大区…

Snackbar的使用和顶部Snackbar实现

下载链接&#xff1a;Snackbar顶部显示 也可以module的形式直接导入使用 &#xff1a;module导入教程 谷歌在android 5.0 发布后&#xff0c;随后公布了design库和设计理念&#xff08;需翻墙&#xff09;&#xff0c;意图在于规范安卓app的风格&#xff0c;类似而不仅仅ios的…

SnackBar 简单使用

1.简介 Snackbar是Android Support Design Library库中的一个控件&#xff0c;可以在屏幕底部快速弹出消息&#xff0c;比Toast更加好用.可以添加点击行为。多用于结合协调布局使用&#xff08;CoordinatorLayout&#xff09;。 implementation com.android.support:design:28…

MaterialDesign之Snackbar学习笔记

近期实在太忙了&#xff0c;看到好的文章先转载&#xff0c;后续自己慢慢消化吧&#xff01; 转载 http://www.jianshu.com/p/cd1e80e64311#rd 没时间解释了&#xff0c;快使用Snackbar!——Android Snackbar花式使用指南 字数2405 阅读1628 评论4 喜欢54 本文是在《Design…