zoukankan      html  css  js  c++  java
  • Android开发——你真的了解Dialog、Toast和Snackbar吗

    0. 前言

    今天给大家带来一篇简单易懂的关于Android提醒小功能的文章。DialogToast我们都不陌生,而SnackbarDesign 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();


    现在上图的DialogMaterial 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只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会ToastToast的基本用法吧如下所示:

    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

    如果说DialogToast是两个极端的话,那么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();

    这里调用Snackbarmake()方法来创建一个Snackbar对象,主要是make()方法的第一个参数需要传入一个view只要是当前界面布局的任意一个view都可以Snackbar会使用这个view来自动查找最外层的布局以展示Snackbar。第二、三个参数和Toast类似。接着是setAction()方法来设置一个动作,从而Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。

    现在重新运行一下程序,效果如下图所示,可以看到,Snackbar的效果有点类似于Toast,不过它是从屏幕底部弹出来的。另外Snackbar上面可以加入和用户交互的按钮,比如删除数据的时候给用户一个Undo的选项,从这些小的细节方面可以提升很多的用户体验。



    4.  总结

    1Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog

    2Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候使用Toast

    3Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。


  • 相关阅读:
    Arr
    class4
    class3联大网页
    class33
    class3
    人机交换 NO 1书签
    大数据的框架与特点
    mapreduce排序
    mapreduce求平均数
    mapreduce去重
  • 原文地址:https://www.cnblogs.com/qitian1/p/6461467.html
Copyright © 2011-2022 走看看