SnackBar 的使用
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 的使用相关推荐
- SnackBar使用注意事项
添加依赖库要注意版本一致, 下面是不一致出现的错误,,,,,,改为support:design:25.3.1 就没问题了 SnackBar的基本用法 Snackbar.make(view, messa ...
- SnackbarUtilDemo【Snackbar的封装类】
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这个工具类参考的是<没时间解释了,快使用Snackbar!--Android Snackbar花式使用指南>,代码几乎一 ...
- Dialog、Toast、Snackbar,你真的了解它们吗?
2019独角兽企业重金招聘Python工程师标准>>> 首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使用的: AlertDialog.Builder buil ...
- Snackbar源码分析
目录介绍 1.最简单创造方法 1.1 Snackbar作用 1.2 最简单的创建 1.3 Snackbar消失的几种方式 2.源码分析 2.1 Snackbar的make方法源码分析 2.2 对Sna ...
- Flutter开发之SnackBar提示组件-4(43)
SnackBar无论是用法还是功能使用几乎都跟原生Android一样 ,唯一有一点需要留意的是在Scaffold.of(context).showSnackBar()中传递的context必须不能是S ...
- Android提醒微技巧,你真的了解Dialog、Toast和Snackbar吗?
本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新. 今天给大家带来一篇简单易懂的微技巧文章,并没有什么高深的技术点,但重点仍然是在细节,相信还是可以给 ...
- Android提醒:Dialog,Toast,Snackbar
参考:http://blog.csdn.net/sinyu890807/article/details/51336415 Dialog 1.确定取消对话框 AlertDialog dialog = n ...
- vuetify table_vuex 封装设计全局可用的vuetify中的snackbar
Vuetify是 Vue 的一个UI框架,帮助我们快速搭建应用.有众多优秀的组件可供选择: v-data-table 显示表格数据 v-dialog 实现弹框设计 v-toolbar等实现横向菜单 . ...
- Android SnackBar:你值得拥有的信息提示控件
概述: Snackbar提供了一个介于Toast和AlertDialog之间轻量级控件,它可以很方便的提供消息的提示和动作反馈. 有时我们想这样一种控件,我们想他可以想Toast一样显示完成便可以消失 ...
- Android还在用Toast?你Out啦,该试试Snackbar了
<pre name="code" class="java">例:Snackbar.make(view, message, duration) .se ...
最新文章
- BZOJ1227 [SDOI2009]虔诚的墓主人 【树状数组】
- python对windows进行操作_【转】python 操作windows下的目录
- 思科模拟器32位_三款另类的68k Mac模拟器
- c#中常用集合类和集合接口之接口系列【转】
- String写时拷贝实现
- OsharpNS轻量级.net core快速开发框架简明入门教程-多上下文配置(多个数据库的使用)...
- linux zookeeper开机启动
- TCP 之 抓包分析
- 自定义httpSession
- Python爬虫实战(6)-爬取QQ空间好友说说并生成词云(超详细)
- 安卓root后查看WiFi密码
- 输入日期,查看当天是星期几
- 深度学习 yolov5等结构图
- 记一次在android使用fdisk
- 如何将二维码巧妙放进海报里?
- 文件已经删除,但是空间没有释放的异常
- mac系统清理优化软件iMacCleaner Mac中文版
- 浪潮优派培训笔记:Tomcat服务器
- B树索引,面向海量数据的金钥匙
- 【沃顿商学院学习笔记】管理学——09行业对腐败的控制 Corruption Control By Industries