Android提醒Dialog、Toast和Snackbar ---站在巨人的肩膀上学习总结

详情请开偶像博客:http://blog.csdn.net/guolin_blog/article/details/51336415

一:Dialog 的使用场景

Dialog的作用是给用户一个提示信息,并让用户根据提示做出判断。而Dialog的特征就是,它会阻止你原本正在进行的操作,必须停止下来对Dialog进行处理。但是,大多数的人可能并不喜欢这样被打断,也许用户正在处理一项重要的操作,突然弹出一个Dialog遮挡住了他原本的操作,这个时候用户会变得很恼火

1,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();

2,注意:2.3系统的Dialog很丑,不具有Material Design风格想在老版本下能有Material Design风格必须使用appcompat-v7库中也提供了一个AlertDialog类,完整路径如下

android.support.v7.app.AlertDialog

**这样使用的Dailog就是有Material Design 风格的Dailog,效果如下图
Android提醒Dialog、Toast和Snackbar ---站在巨人的肩膀上学习总结_第1张图片

二:Toast的使用场景:

Toast只会弹出一段信息,告诉用户某某事情已经发生了,过一段时间后就会自动消失。它完全不会阻挡用户的任何操作,甚至用户也可以完全不用理会Toast。

1,Toast的使用我就不再写了,这里写一个避免多次点击弹出多次Toast的bug解决方案

2,方式一:

public class Util {

    private static Toast toast;

    public static void showToast(Context context, 
        String content) {
        if (toast == null) {
            toast = Toast.makeText(context,
                         content, 
                         Toast.LENGTH_SHORT);
        } else {
            toast.setText(content);
        }
        toast.show();
    }

}

避免每次调用都创建新的Toast对象,解决问题

3,方式二:

    private boolean isFristClick = true;


 if (isFristClick) {
                        ToastUtil.showShort(MessageListActivity.this, "您没有消息可清除");
                        isFristClick = false;
                    } else if ((System.currentTimeMillis() - fristTime) > 2000) {
                        ToastUtil.showShort(MessageListActivity.this, "您没有消息可清除");
                        fristTime = System.currentTimeMillis();
                    }

这种方式是控制两次点击事件的差来解决的,这里使用推荐方式一

三:SnackBar的使用场景:

Snackbar和Toast比较相似,但是用途更加广泛,并且它是可以和用户进行交互的。Snackbar使用一个动画效果从屏幕的底部弹出来,过一段时间后也会自动消失。

1,使用SnackBar之前需要添加依赖:

dependencies {
    compile 'com.android.support:design:23.4.0'
}

2,简单实用的案例:

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。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。这些和Toast都是类似的。接着这里又调用了一个setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。

最后总结:现在你有三种方式可以给用户提示信息,Dialog、Toast和Snackbar

1, Dialog:当提示信息是至关重要的,并且必须要由用户做出决定才能继续的时候,使用Dialog。
2,Toast:当提示信息只是告知用户某个事情发生了,用户不需要对这个事情做出响应的时候,使用Toast。
3,Snackbar:以上两者之外的任何其他场景,Snackbar可能会是你最好的选择。

你可能感兴趣的:(Android-进阶)