1.简单使用

Snackbar.make(MainActivity.this,view,"snack bar",Snackbar.LENGTH_SHORT).show();

第一个参数是Context 、第二个参数是要显示的view 、第三个参数是显示的字符串、第四个参数是显示时长,时长有下面三种

①Snackbar.LENGTH_SHORT:与Toast.LENGHT_SHORT(大约1.x秒)一样显示较短时长后自动消失。

②Snackbar.LENGTH_LONG:与Toast.LENGHT_LONG(大约3秒)一样显示相对较长时间后自动消失。

③Snackbar.LENGTH_INDEFINITE:永不消失除非手动调用dismiss()方法去除Snackbar。

2.交互使用

Snackbar snack_bar = Snackbar.make(MainActivity.this, v, "确定要删除文件吗", Snackbar.LENGTH_SHORT);snack_bar.setAction("确认", new View.OnClickListener() {@Overridepublic void onClick(View v) {//删除文件}});
snack_bar.show();

在SnackBar上 指定按钮进行交互。

3.监听SnackBar 的显示状态

//                对snackbar状态的监听snack_bar.setCallback(new Snackbar.Callback(){
//                    在Snackbar隐藏时回调
//                     ①Snackbar.Callback.DISMISS_EVENT_SWIPE=0:Indicates that the Snackbar was dismissed via a swipe。
//                    该事件下Snackbar退出的原因是;意思是“Snackbar右划退出事件”,注意这个右划事件只有在父布局为CoordinatorLayout才会被触发,其他布局如LinearLayout、RelativeLayout等是不会出发的。
//                     ②Snackbar.Callback.DISMISS_EVENT_ACTION = 1:Indicates that the Snackbar was dismissed via an action click。//                    该事件下Snackbar退出的原因是:Snackbar通过Action点击事件触发退出。
//
//                     ③Snackbar.Callback.DISMISS_EVENT_TIMEOUT = 2:Indicates that the Snackbar was dismissed via a timeout。
//
//                    该事件下Snackbar退出的原因是:Snackbar超出通过setDuration()方法所设置的规定时间后退出,这也是正常的自然退出。
//
//                     ④Snackbar.Callback.DISMISS_EVENT_MANUAL = 3:Indicates that the Snackbar was dismissed via a call to dismiss()。
//
//                    该事件下Snackbar提出的原因是:通过手动调用了dismiss()方法。
//
//                     ⑤Snackbar.Callback.DISMISS_EVENT_CONSECUTIVE = 4:Indicates that the Snackbar was dismissed from a new Snackbar being shown。
//
//                    该事件下Snackbar提出的原因:由于新的Snackbar的显示而退出。@Overridepublic void onDismissed(Snackbar transientBottomBar, int event) {super.onDismissed(transientBottomBar, event);}
//                    在Snackbar显示时回调@Overridepublic void onShown(Snackbar sb) {super.onShown(sb);}});

4.自定义SnackBar

Snackbar提供了一个getView()方法,这个方法就可以获取到Snackbar.SnackbarLayout的实例,用于进行自定义

对于自定义我们首先得获取Snackbar的布局:

final Snackbar.SnackbarLayout snackbarView = (Snackbar.SnackbarLayout) snackbar.getView();

拿到布局以后我们可以对Snackbar的背景和透明度进行设置:

snackbarView.setBackgroundResource(R.drawable.background);
snackbarView.setAlpha((float) 0.4);

还记得刚才我们看的Snackbar的布局文件吗?里面就是一个TextView和一个Button,如果我们想要对他们进行自定义我们可以先拿到他们的布局view,首先我们看一下Button:

final Button snackbar_action = (Button) snackbarView.findViewById(android.support.design.R.id.snackbar_action);

我们拿到Button实例之后就可以对其进行自定义了:

snackbar_action.setTextColor(Color.RED);
snackbar_action.setTextSize(convertSpToPixel(snackbarView.getContext(),10));

我们在对Snackbar里的TextView进行自定义:

final TextView snackbar_text = (TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text);

对其设置字体大小和字体颜色:

snackbar_text.setTextColor(Color.RED);
snackbar_text.setTextSize(convertSpToPixel(snackbarView.getContext(),10));

对于TextView本身来说还有一个方法就是可以通过setCompoundDrawables(left,top,right,bottom)设置图标Icon,现在我们对Snackbar里的TextView进行左侧图标Icon的设置:

//设置左侧iconDrawable drawable = ContextCompat.getDrawable(MainActivity.this, R.mipmap.ic_core);if (drawable != null) {drawable = fitDrawable(getResources(), drawable, (int) convertDpToPixel(24, MainActivity.this));} else {throw new IllegalArgumentException("resource_id is not a valid drawable!");}final Drawable[] compoundDrawables = snackbar_text.getCompoundDrawables();snackbar_text.setCompoundDrawables(drawable, compoundDrawables[1], compoundDrawables[2], compoundDrawables[3]);

这里的代码还用到的方法如下:

/*** 方法描述:将drawable压缩为指定宽高的drawable** @param resources* @param drawable  原始drawable* @param sizePx    指定的drawable压缩宽高* @return*/private static Drawable fitDrawable(Resources resources, Drawable drawable, int sizePx) {if (drawable.getIntrinsicWidth() != sizePx || drawable.getIntrinsicHeight() != sizePx) {if (drawable instanceof BitmapDrawable) {drawable = new BitmapDrawable(resources, Bitmap.createScaledBitmap(getBitmap(drawable), sizePx, sizePx, true));}}drawable.setBounds(0, 0, sizePx, sizePx);return drawable;}/*** 方法描述:将Drawable转化为Bitmap** @param drawable* @return*/private static Bitmap getBitmap(Drawable drawable) {if (drawable instanceof BitmapDrawable) {return ((BitmapDrawable) drawable).getBitmap();} else if (drawable instanceof VectorDrawable) {return getBitmap((VectorDrawable) drawable);} else {throw new IllegalArgumentException("unsupported drawable type");}}/*** 方法描述:将VectorDrawable转化为Bitmap** @param vectorDrawable* @return*/@TargetApi(Build.VERSION_CODES.LOLLIPOP)private static Bitmap getBitmap(VectorDrawable vectorDrawable) {Bitmap bitmap = Bitmap.createBitmap(vectorDrawable.getIntrinsicWidth(),vectorDrawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);Canvas canvas = new Canvas(bitmap);vectorDrawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());vectorDrawable.draw(canvas);return bitmap;}

SnackBar 的使用相关推荐

  1. SnackBar使用注意事项

    添加依赖库要注意版本一致, 下面是不一致出现的错误,,,,,,改为support:design:25.3.1 就没问题了 SnackBar的基本用法 Snackbar.make(view, messa ...

  2. SnackbarUtilDemo【Snackbar的封装类】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个工具类参考的是<没时间解释了,快使用Snackbar!--Android Snackbar花式使用指南>,代码几乎一 ...

  3. Dialog、Toast、Snackbar,你真的了解它们吗?

    2019独角兽企业重金招聘Python工程师标准>>> 首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使用的: AlertDialog.Builder buil ...

  4. Snackbar源码分析

    目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Sna ...

  5. Flutter开发之SnackBar提示组件-4(43)

    SnackBar无论是用法还是功能使用几乎都跟原生Android一样 ,唯一有一点需要留意的是在Scaffold.of(context).showSnackBar()中传递的context必须不能是S ...

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

    本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新. 今天给大家带来一篇简单易懂的微技巧文章,并没有什么高深的技术点,但重点仍然是在细节,相信还是可以给 ...

  7. Android提醒:Dialog,Toast,Snackbar

    参考:http://blog.csdn.net/sinyu890807/article/details/51336415 Dialog 1.确定取消对话框 AlertDialog dialog = n ...

  8. vuetify table_vuex 封装设计全局可用的vuetify中的snackbar

    Vuetify是 Vue 的一个UI框架,帮助我们快速搭建应用.有众多优秀的组件可供选择: v-data-table 显示表格数据 v-dialog 实现弹框设计 v-toolbar等实现横向菜单 . ...

  9. Android SnackBar:你值得拥有的信息提示控件

    概述: Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈. 有时我们想这样一种控件,我们想他可以想Toast一样显示完成便可以消失 ...

  10. Android还在用Toast?你Out啦,该试试Snackbar了

    <pre name="code" class="java">例:Snackbar.make(view, message, duration) .se ...

最新文章

  1. BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
  2. python对windows进行操作_【转】python 操作windows下的目录
  3. 思科模拟器32位_三款另类的68k Mac模拟器
  4. c#中常用集合类和集合接口之接口系列【转】
  5. String写时拷贝实现
  6. OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)...
  7. linux zookeeper开机启动
  8. TCP 之 抓包分析
  9. 自定义httpSession
  10. Python爬虫实战(6)-爬取QQ空间好友说说并生成词云(超详细)
  11. 安卓root后查看WiFi密码
  12. 输入日期,查看当天是星期几
  13. 深度学习 yolov5等结构图
  14. 记一次在android使用fdisk
  15. 如何将二维码巧妙放进海报里?
  16. 文件已经删除,但是空间没有释放的异常
  17. mac系统清理优化软件iMacCleaner Mac中文版
  18. 浪潮优派培训笔记:Tomcat服务器
  19. B树索引,面向海量数据的金钥匙
  20. 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries

热门文章

  1. Scope Hoisting(范围提升)
  2. Rive动画使用介绍(Flutter)
  3. 网易蜂巢邀请您免费体验!
  4. Fortify漏洞修复总结
  5. python用正则获取字幕中的文本
  6. 北方工业大学计算机网络,北方工业大学计算机科学与技术研究生导师介绍:马东超...
  7. html中增删改查怎么写,增删改查crud
  8. 刷脸支付常见问题汇总
  9. MAC Homebrew国内如何自动安装(国内地址)
  10. http://s22.app1105796624.qqopenapp.com/