Android开发——你真的了解Dialog、Toast和Snackbar吗
0. 前言
今天给大家带来一篇简单易懂的关于Android提醒小功能的文章。Dialog和Toast我们都不陌生,而Snackbar是Design Support库中提供的新控件,有些朋友可能还不了解。但是你真的知道什么时候应该使用Dialog,什么时候应该使用Toast,什么时候应该使用Snackbar吗?本篇文章中我们就来学习一下这三者使用的时机,另外还会介绍一些额外的技巧。本文转载自郭大侠的博客。
1. Dialog
首先来介绍一下Dialog的用法吧,其实很简单,相信大多数人都是经常使用的:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title")
.setMessage("Dialog content.")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
}
}).show();
现在上图的Dialog是Material Design风格的,因为是在6.0系统上运行的,因此会自动赋予这样的风格。但是如果在老版本系统上运行,比如说2.3系统,会是什么样的效果呢?运行一下就知道了,如下图所示:
这个效果就比较丑了,不过没办法,这就是2.3系统当时的风格呀。
人的审美总是在进步的,我们有没有什么办法在老版本的系统中也使用Material Design风格的Dialog呢?当然有,Google已经充分考虑到了这一点,在appcompat-v7库中也提供了一个AlertDialog类,完整路径如下,我们使用这个包中的AlertDialog,就能让对话框在所有的系统版本中都保持一致的风格了。有兴趣的朋友可以自己试一试。
android.support.v7.app.AlertDialog
Dialog的作用是给用户一个提示信息,并让用户根据提示做出判断。而Dialog的特征就是,它会阻止你原本正在进行的操作,必须停止下来对Dialog进行处理。因此,使用Dialog的时候还是谨慎一点比较好,尽量不要给用户带来糟糕的体验。
2. Toast
Toast只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会Toast。Toast的基本用法吧如下所示:
Toast.makeText(context, "thingshappened", Toast.LENGTH_SHORT).show();
很简单但是不是说Toast的用法就一点深度都没有了,比如说上述的写法就会存在如下图所示的问题:
可以看到,这里快速连续点击了五次按钮,Toast就触发了五次。这样的体验其实是不好的,因为也许用户是手抖了一下多点了几次,导致Toast就长时间关闭不掉了。又或者应该弹出新的Toast提示,而上一个Toast却还没显示结束。因此,最佳的做法是将Toast的调用封装成一个接口,写在一个公共的类当中,如下所示:
public class Util {
private static Toast toast;
public static void showToast(Context context,
String content) {
if (toast == null) {//先判断Toast对象是否为空,如果是空的情况下才会调用makeText()方法来去生成一个Toast对象
toast = Toast.makeText(context,content,
Toast.LENGTH_SHORT);
} else {//否则就直接调用setText()方法来设置显示的内容
toast.setText(content);
}
toast.show();//最后再调用show()方法将Toast显示出来
}
}
现在我们再重新运行一遍程序,效果如下图所示, 可以看到,不管我们触发多少次Toast调用,都只会持续一次Toast显示的时长,这也算是一个小技巧吧。
Toast的作用是告诉用户现在发生了什么事情,不会阻挡用户的操作,但同时用户只能被动接收这个事情,因为没有什么办法来让用户是选择同意还是拒绝。
虽说Toast在用户体验方面要比Dialog好一些,但是也要慎用,尤其是涉及到一些敏感操作的时候。比如说删除数据,只给用户一个提示:“你的数据已被删除”,而不给用户选择撤销删除的机会,也会产生较差体验。
3. Snackbar
如果说Dialog和Toast是两个极端的话,那么Snackbar就是处于中间的位置了。Snackbar相对于Toast来说增加了和用户进行交互的功能,呆会看下面的效果就会知道。
在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖:
dependencies {
compile 'com.android.support:design:23.4.0'
}
然后就可以使用Snackbar了,它的用法和Toast是比较相似的:
Snackbar.make(view, "data deleted",Snackbar.LENGTH_LONG)
.setAction("Undo", new View.OnClickListener(){
@Override
public void onClick(View v) {
}
}).show();
这里调用Snackbar的make()方法来创建一个Snackbar对象,主要是make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局以展示Snackbar。第二、三个参数和Toast类似。接着是setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。
现在重新运行一下程序,效果如下图所示,可以看到,Snackbar的效果有点类似于Toast,不过它是从屏幕底部弹出来的。另外Snackbar上面可以加入和用户交互的按钮,比如删除数据的时候给用户一个Undo的选项,从这些小的细节方面可以提升很多的用户体验。
4. 总结
(1)Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog。
(2)Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候使用Toast。
(3)Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。
Android开发——你真的了解Dialog、Toast和Snackbar吗的更多相关文章
- Android开发实战之底部Dialog弹出效果
在Android开发中,有很多情况下我们需要使用到对话框,遗憾的是,安卓自带的对话框样式不能满足我们实际的需要,所以往往需要我们自定义对话框,具体做法:写一个对话框继承自Dialog实现他的一个构造方 ...
- 2020年Android开发市场真的饱和了吗?
公司在杭州,根据我的不客观数据体验来看,最饱和的是iOS,同样发布一个职位iOS是其他技术岗位10倍的投递量. 当然Android作为一个已经市场化十余年的技术门类,它必然早已经是成熟常态.这样的技术 ...
- Android开发之《实现类似Toast可以自动消失的提示栏Tip》
import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.cont ...
- Android开发Toast Notifications
Android开发Toast Notifications 关键类 Toast toast通知是一种在窗口表面弹出的消息.它只占用信息显示所需的空间,用户当前的activity仍保持可见并可交互.该通知 ...
- iOS、Android 开发的前景真的那么差吗?
程序员问问周刊:别蕉绿了,问问「IT老兵哥」吧! Q:本科 985 在上海二线互联网企业工作,公司有人才落户指标,但要排队等五年左右.除此外只能等居住满七年落户,现在想换工作追求更好的发展,纠结是继续 ...
- Android开发之基本控件和详解四种布局方式
Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...
- Android开发之画图的实现
Android开发之画图的实现 四天前上完安卓的第一节课,真的是一脸懵逼,尽管熊哥说和java是差不多的,然而这个包和那个包之间的那些转换都是些什么鬼呀!!!但是四天的学习和操作下来,我觉得安卓 ...
- 让你Android开发更简单
转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...
- Android开发中的输入合法性检验
Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...
随机推荐
- 深入剖析php执行原理(2):函数的编译
本文只探讨纯粹的函数,并不包含方法.对于方法,会放到类.对象中一起研究. 想讲清楚在zend vm中,函数如何被正确的编译成op指令.如何发生参数传递.如何模拟调用栈.如何切换作用域等等,的确是一个很 ...
- Odoo日历视图
转载请注明原文地址:https://www.cnblogs.com/cnodoo/p/9280604.html 一:日历视图定义 根元素为<calendar>. 主要的属性有: co ...
- 2、Android-UI(布局待完成)
2.3.布局 实现界面的整齐摆放各种控件需要使用布局来完成 布局是一种可用于放置很多控件的容器 可以按照一定的规律调整内部的控件位置 布局的内部不仅可以放置控件还可以放置布局 1.线性布局 Linea ...
- MyBatis(1)-简单入门
简介 什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.My ...
- WEB安全 php+mysql5注入防御(二)
第四天: 一.新的注入函数: ascii() substring("string",n,m) n>=1 limit n,m ...
- springmvc与Structs2本质区别
1.前端控制器不同:structs2入口是一个filter过滤器,springmvc入口是一个servlet. 2.设计思想不同: struts2通过在action类中定义成员变量接收请求参数,str ...
- leetcode 121. Best Time to Buy and Sell Stock 、122.Best Time to Buy and Sell Stock II 、309. Best Time to Buy and Sell Stock with Cooldown
121. Best Time to Buy and Sell Stock 题目的要求是只买卖一次,买的价格越低,卖的价格越高,肯定收益就越大 遍历整个数组,维护一个当前位置之前最低的买入价格,然后每次 ...
- HttpURLConnection与HttpClient学习
转载HttpURLConnection与HttpClient浅析 一.HttpURLConnection的使用 import org.slf4j.Logger; import org.slf4j.Lo ...
- js 日历插件开发
1.HTML完整代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...
- sys,os加glob加os.path用法
1 sys.path是python的搜索模块的路径集,是一个list 打印下大概长这样 C:\Python27\Lib\idlelib C:\Windows\system32\python27.z ...