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吗的更多相关文章

  1. Android开发实战之底部Dialog弹出效果

    在Android开发中,有很多情况下我们需要使用到对话框,遗憾的是,安卓自带的对话框样式不能满足我们实际的需要,所以往往需要我们自定义对话框,具体做法:写一个对话框继承自Dialog实现他的一个构造方 ...

  2. 2020年Android开发市场真的饱和了吗?

    公司在杭州,根据我的不客观数据体验来看,最饱和的是iOS,同样发布一个职位iOS是其他技术岗位10倍的投递量. 当然Android作为一个已经市场化十余年的技术门类,它必然早已经是成熟常态.这样的技术 ...

  3. Android开发之《实现类似Toast可以自动消失的提示栏Tip》

    import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.cont ...

  4. Android开发Toast Notifications

    Android开发Toast Notifications 关键类 Toast toast通知是一种在窗口表面弹出的消息.它只占用信息显示所需的空间,用户当前的activity仍保持可见并可交互.该通知 ...

  5. iOS、Android 开发的前景真的那么差吗?

    程序员问问周刊:别蕉绿了,问问「IT老兵哥」吧! Q:本科 985 在上海二线互联网企业工作,公司有人才落户指标,但要排队等五年左右.除此外只能等居住满七年落户,现在想换工作追求更好的发展,纠结是继续 ...

  6. Android开发之基本控件和详解四种布局方式

    Android中的控件的使用方式和iOS中控件的使用方式基本相同,都是事件驱动.给控件添加事件也有接口回调和委托代理的方式.今天这篇博客就总结一下Android中常用的基本控件以及布局方式.说到布局方 ...

  7. Android开发之画图的实现

    Android开发之画图的实现    四天前上完安卓的第一节课,真的是一脸懵逼,尽管熊哥说和java是差不多的,然而这个包和那个包之间的那些转换都是些什么鬼呀!!!但是四天的学习和操作下来,我觉得安卓 ...

  8. 让你Android开发更简单

    转载:http://www.jianshu.com/p/22ff8b5fdadc 搭建一个新的Android项目,你会怎么做? 每个人对应用框架的理解不相同,但是最终达到的效果应该是一样: ①降低项目 ...

  9. Android开发中的输入合法性检验

    Why ? 合法性检查对于程序的健壮性具有重要作用.在Android开发中,良好的合法性检查设计机制可以使程序更加清晰,产生bug更少,交互更加友好. What ? 合法性检查的目的在于确定边界.对于 ...

随机推荐

  1. Io性能分析

    一.iostat使用说明 1.命令使用方法 使用ixstat –x 1 可以每隔1秒钟采集所有设备的io信息.其中的1类似于使用“vmstat  1”后面的1. 2.命令格式说明 ―――――――――― ...

  2. php模式设计

    1,策略模式 2,个体模式 3,工厂模式 4,观察者模式 <?php class ExchangeRate { static private $instance = NULL; private ...

  3. Android 之 GridView具体解释

    工作这么久以来,都是以解决需求为目标.渐渐发现这样的学习方式不好,学到的知识能立即解决这个问题,但没有经过梳理归纳. 故想系统总结下一些有趣味的知识点. 在这篇博客中想以一个样例系统解说下GridVi ...

  4. SoapUI这么好,舍得不用吗?

    之前尝试去学习哈SoapUI, 安装都报错,直接拖黑不用,对java开发的产品本身不感冒 后来工作上,和老外沟通,发现他们不会用xmlspy,只会SoapUI,心里都想,不学习看来不方便,然后都安装了 ...

  5. 【模板】Dijkstra总结

    Dijkstra算法使用于跑最短路的算法. 算法思想 假定图是不带负权的有向图或无向图,采用贪心策略,每次扩展一个距离为最短的点,在以这个点为中间点,更新其他的所有点的距离.当所有边权都为正时,由于不 ...

  6. Odoo中报表PDF样式出错的解决办法

    如果发现生成的pdf样式不对,那可能是wkhtmltopdf没办法访问web服务器导致的.wkhtmltopdf进程使用web.base.url作为根url来生成对应文件路径,但这个地址是每次管理员登 ...

  7. Cookies、sessionStorage和localStorage解释及区别?

    浏览器的缓存机制提供了可以将用户数据存储在客户端上的方式,可以利用cookie,session等跟服务器端进行数据交互 一.cookie和session Cookie和 session都是用来跟踪浏览 ...

  8. 【Webpack】学习随笔

    参考链接:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具. Webpack 可以将多种静态资源 j ...

  9. 【CSS-flex】圣杯布局(Holy Grail Layout)、输入框的布局、悬挂式布局、固定的底栏

    1.圣杯布局(Holy Grail Layout) 其指的是一种最常见的网站布局.页面从上到下,分成三个部分:头部(header),躯干(body),尾部(footer).其中躯干又水平分成三栏,从左 ...

  10. FRM一级备考感想

    作为金融小白,工作四年多,边边角角有了些许的最直观认识,决定深入了解下金融相关123. 曾经尝试CFA失败,转战FRM安慰下失败的灵魂. 2018.11.17 FRM Part I 考试结束,自7月初 ...