详情请开偶像博客: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,效果如下图
二: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可能会是你最好的选择。