android Snackbar新控件解析
Dialog和Toast,我们在日常的开发中一定非常熟悉,常常被用来作为Android应用内提示性信息的两种展示方式。然而Google在Design包中又提供了一种新的选择,那就是Snackbar。今天主要介绍Snackbar新控件的使用,以及三种提示信息展示方式的比较。
什么是Snackbar
Snackbar 是 Android 5.0 新特性——Material Design 中的一个控件,用来代替 Toast ,Snackbar与Toast的主要区别是:Snackbar可以滑动退出,也可以处理用户交互(点击)事件。
Snackbar的特性
- Snackbar会在超时或者用户在屏幕其他地方触摸之后自动消失;
- 可以在屏幕上滑动关闭;
- 出现时不会阻碍用户在屏幕上的输入
- 屏幕上同时最多只能显示一个Snackbar
- 如果在屏幕上有一个Snackbar的情况下再显示一个Snackbar,则先将当前显示的Snackbar隐藏后再显示新的Snackbar
- 可以在Snackbar中添加一个按钮,处理用户点击事件
- Snackbar一般需要CoordinatorLayout来作为父容器,CoordinatorLayout保证Snackbar可以右滑退出
Snackbar的使用
通过上文的介绍,我们对Snackbar的含义和功能有了基本了解,接下来通过代码来详细介绍Snackbar的使用。
使用MD控件,首先要在gradle文件中导入依赖,本文中使用的依赖包如下:
compile 'com.android.support:design:25.3.0'
弹出Snackbar,弹出Snackbar的方式和Toast方式相似,通过调用Snackbar类中的静态方法make()设置相关信息,show()方法弹窗Snackbar
Snackbar.make(view, message, duration).setAction(action message, click listener).show();
1.make()实现简单弹出
- make() 方法的第一个参数是一个 view,snackbar 会找到一个父 view,以寄存所赋的 snackbar 值。Snackbar 会沿着 view 的树状路径,找到第一个合适的布局或窗口视图,作为父 view。一般是一个CoordinatorLayout对象。
- 第二个参数是Snackbar中想要显示的内容,一般只能显示2行;
- 第三个参数是Snackbar想要显示的时间长短,有三个值:LENGTH_INDEFINITE 永远显示、LENGTH_LONG显示较长时间、LENGTH_SHORT 显示较短时间;
- Snackbar也要像Toast一样,调用show()方法才能显示。
案例分析
首先,我们创建一个Activity,在布局文件中添加CoordinatorLayout控件,并创建一个FloatingActionButton,用于测试FloatingActionButton结合Snackbar的展示效果。布局文件如下:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="com.ease.wawaandroid.testdemo.SnackbarActivity"><android.support.design.widget.CoordinatorLayoutandroid:id="@+id/snackbar_container"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.design.widget.FloatingActionButtonandroid:id="@+id/snackbar_fab"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="right|bottom"android:layout_marginBottom="10dp"android:layout_marginRight="10dp"app:borderWidth="0dp"app:fabSize="normal" /></android.support.design.widget.CoordinatorLayout></android.support.constraint.ConstraintLayout>
在Activity中对控件进行初始化,并监听FloatingActionButton的点击事件,实现点击FloatingActionButton,弹出Snackbar,Activity的代码如下:
public class SnackbarActivity extends AppCompatActivity implements View.OnClickListener {private CoordinatorLayout coordinatorLayout;private FloatingActionButton fab;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_snackbar);initView();}private void initView() {coordinatorLayout = (CoordinatorLayout) findViewById(R.id.snackbar_container);fab = (FloatingActionButton) findViewById(R.id.snackbar_fab);fab.setOnClickListener(this);}@Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.snackbar_fab:Snackbar.make(coordinatorLayout, "这是一个snackbar", Snackbar.LENGTH_SHORT).show();break;}}
}
执行上述代码,显示效果为:
注意:mark()方法的第一个参数一定要是coordinatorLayout,否则,弹出的Snackbar将覆盖FloatingActionButton控件。
到这里就基本实现了Snackbar的简单弹出,但是,目前的效果和我们之前的Toast没什么大的区别,同时发现案例中,我们并没有调用Snackbar的setAction()方法。接下来,我们将开始介绍Snackbar的另一个重要方法setAction()。
2.setAction()添加按钮
除了显示之外,Snackbar中还可以有一个按钮,我们称之为Action,它显示在Snackbar的右边,可以通过Snackbar对象的setAction()方法设置,修改上文中FloatingActionButton控件点击事件的处理逻辑:
case R.id.snackbar_fab:Snackbar.make(coordinatorLayout, "这是一个snackbar", Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(coordinatorLayout, "Action 被点击", Snackbar.LENGTH_SHORT).show();}}).show();break;
添加setAction()方法,该方法有两个参数,第一个参数是按钮的名称,第二个参数是按钮点击事件的监听方法。显示效果如下:
3.显示隐藏监听
在Snackbar弹出和消失时,都会触发一个回调事件,我们可以通过Snackbar对象的addCallback()方法(setCallback()方法已经过时)捕获它们:
Snackbar.make(coordinatorLayout, "这是一个snackbar", Snackbar.LENGTH_SHORT).setAction("action", new View.OnClickListener() {@Overridepublic void onClick(View v) {Snackbar.make(coordinatorLayout, "Action 被点击", Snackbar.LENGTH_SHORT).show();}}).addCallback(new Snackbar.Callback(){@Overridepublic void onDismissed(Snackbar transientBottomBar, int event) {super.onDismissed(transientBottomBar, event);Toast.makeText(SnackbarActivity.this, "Snackbar隐藏", Toast.LENGTH_SHORT).show();}@Overridepublic void onShown(Snackbar sb) {super.onShown(sb);Toast.makeText(SnackbarActivity.this, "Snackbar显示", Toast.LENGTH_SHORT).show();}}).show();
Snackbar.Callback中有两个抽象方法,onDismissed()方法是当Snackbar消失的时候触发的事件;onShown()方法是当Snackbar显示的时候触发的事件。显示效果如下所示:
4.相关属性设置
Snackbar支持动态的设置一些属性,如Action的文本颜色、显示的文本内容、显示的持续时间等,可通过下面方法进行设置:
Snackbar snackbar = Snackbar.make(coordinatorLayout, "Action 被点击", Snackbar.LENGTH_SHORT);snackbar.setText("动态文本");//动态设置文本显示内容snackbar.setActionTextColor(Color.RED);//动态设置Action文本的颜色snackbar.setDuration(5000);//动态设置显示时间View snackbarView = snackbar.getView();//获取Snackbar显示的View对象//获取显示文本View,并设置其显示颜色((TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_text)).setTextColor(Color.BLUE);//获取Action文本View,并设置其显示颜色((TextView) snackbarView.findViewById(android.support.design.R.id.snackbar_action)).setTextColor(Color.BLUE);//设置Snackbar的背景色snackbarView.setBackgroundColor(Color.GREEN);//设置Snackbar显示的位置ViewGroup.LayoutParams params = snackbarView.getLayoutParams();CoordinatorLayout.LayoutParams layoutParams = new CoordinatorLayout.LayoutParams(params.width, params.height);layoutParams.gravity = Gravity.CENTER_VERTICAL;//垂直居中snackbarView.setLayoutParams(layoutParams);
至此,Snackbar的相关使用就介绍完了。
Snackbar与Dialog和Toast的比较
通过上文的介绍,我们知道了Snackbar和Dialog、Toast一样都是用来作为android内提示信息的,三者之间的应用场景也有所不同。
Dialog
模态对话框。也就说,此刻该对话框中的内容获取了焦点,想要操作对话框以外的功能,必须先对该对话框进行响应。
应用场景:对于删除确认、版本更新等重要性提示信息,需要用户做出选择的情况下,使用Dialog。
Toast
非模态提示框。也就说提示框的显示并不影响我们对其他地方的操作,Toast无法手动控制隐藏,需要设置Toast的显示时长,一旦显示时间结束,Toast会自动消失。如果多次点击并显示Toast,就会出现Toast重复创建并显示,给用户造成一种Toast长时间不隐藏的幻觉。
应用场景:对于无网络提示、删除成功、发布操作完成等这类不重要的提示性信息,使用Toast;
Snackbar
Snackbar和Toast比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。
应用场景:删除操作时,弹出Snackbar用于确认删除操作;消息发送失败时,弹出Snackbar,用于重新发送操作;当然重要的是与MD组件相结合,用户体验效果更佳。
至此,有关Snackbar的相关介绍就介绍完了,如有问题,欢迎留言。
android Snackbar新控件解析相关推荐
- 【转】Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用...
Android M新控件之AppBarLayout,NavigationView,CoordinatorLayout,CollapsingToolbarLayout的使用 分类: Android UI ...
- Android M 新控件了解学习
Android M 新控件了解:FloatingActionButton,TextInputLayout,Snackbar,TabLayout, AppBarLayout,NavigationView ...
- Android M新控件之FloatingActionButton,TextInputLayout,Snackbar,TabLayout的使用
在前不久的谷歌2015 I/O大会上,发布了Android新版本M,貌似从这个版本开始Android不在以数字命名版本了. 在这次的I/O大会上谷歌对Android并没有很大的改变,主要是修改完善之前 ...
- Android Design新控件之TextInputLayout 文本输入布局与自定义颜色简介
Android 从5.0版本开始,新增了Android Materia Design库,让开发者高效的实现炫酷的UI效果 推荐: TextInputLayout(文本输入布局) TabLaout(选项 ...
- android ui新控件,android_常用UI控件_01_TextView3_点击打开新的activity
点击textview打开新的activity (1) MainActivity.javapackage com.example.android_textview_opennewactivity; im ...
- 视频教程-Android Material Design 新控件-Android
Android Material Design 新控件 刘志远,北京邮电大学硕士研究生, 北京育华志远科技有限公司创始人, 育华志远教育品牌负责人,育华志远课程体系打造者. 率领团队为互联网行业培训千 ...
- 一个Demo学会用Android兼容包新控件
2019独角兽企业重金招聘Python工程师标准>>> 前言 伟大的Google为Android推出了一系列的兼容包,最新的就是Design Support Library了,这里我 ...
- 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习
Android5.0+推出的新控件感觉特别酷,最近想模仿大神做个看图App出来,所以先把这些新控件用熟悉了. 新控件的介绍.使用等等网上相应的文章已经特别多了,题主也没那能力去写篇详解出来,本篇随笔记 ...
- Android 5.0新控件——FloatingActionButton(悬浮按钮)
Android 5.0新控件--FloatingActionButton(悬浮按钮) FloatingActionButton是5.0以后的新控件,一个悬浮按钮,之所以叫做悬浮按钮,主要是因为自带阴影 ...
最新文章
- C语言字符串排序!_只愿与一人十指紧扣_新浪博客
- 在android布局中使用include和merge标签
- BootStrap自带的图标
- 服务器市场步步为营:Intel发布新款至强Xeon E5-4600v4四路处理器
- 《Head First Java》读书笔记(3) - 异常和IO
- 《巫师 3:狂猎》:传统叙事在开放世界中的水土不服
- 停止过度设计,开发客户需要的软件
- 杭电1214 圆桌会议
- 极客学院30天免费vip
- ie11启用java时打不开_ie11升级后打不开怎么解决?
- 必学:入行电商产品经理必备知识,原来这么简单
- 安全狗又拿下一场重保胜战 第22届投洽会顺利谢幕
- 廊坊金彩教育:店铺标题怎么写
- 轩小陌的Python笔记-Pandas时间序列与日期
- [已解决]smallbin double linked list
- php中的refresh,PHP mysqli_refresh() 函数用法及示例
- 2021-09-26 WPF上位机 45-关键帧动画
- java dns缓存清理_jvm dns缓存问题解决方式
- 读懂python代码_【坚持】Selenium+Python学习之从读懂代码开始 DAY6
- 计算机科学与技术影响因子排名,173个学科SCI期刊影响因子排名
热门文章
- 地铁闸门会夹伤人吗_地铁闸机翻脸不认人?掌握正确的过闸姿势很重要
- Kettle的导入.Excel到MySQL
- echart仪表盘旋转_使用echarts绘制漂亮的渐变键盘仪表盘
- 嵌入式Linux--设备树(DeviceTree fdt)
- C#使用Managed Wifi API连接带密码的SSID .
- 习题3-2 高速公路超速处罚
- wd移动硬盘支持linux,玩转移动硬盘存储之WD篇
- 什么是 web 开发
- linux怎么用启动u盘恢复系统,一种U盘引导下的linux系统备份还原方法与流程
- html中增删改查怎么写,增删改查crud