APP开发实战150-Android 提示功能设计(AlertDialog、Toast和Snackbar的使用)
2017-01-15 21:33
627 查看
34.12 提示功能设计
34.12.1三种方案简介
Android里常用的显示提示信息的方式有三种:AlertDialog、Toast和Snackbar。AlertDialog不会自动消失,需要用户手动操作关闭。
Toast和Snackbar会自动消失,不需要用户手动操作。
对于操作成功的提示信息,如登录成功、提交订单成功等,此类信息即使用户没看到,也不好影响用户使用。可以用Toast或Snackbar显示,然后自动消失,不需要用户点击关闭,减少用户操作。
对于操作失败的提示信息,如登录失败或提交订单失败等,此类信息最好能让用户知道,遇到了什么错误,发便重新提交,用AlertDialog显示比较好,用户没有看到提示信息,然后手动关闭提示框,提示框不好自动消失,确保了用户肯定能看到出错提示。
如果用Toast或Snackbar显示,可能用户还没看到出错提示,Toast或Snackbar就自动消失了;用户不知道什么原因导致操作不成功,只能再次尝试登陆或提交订单,这样会导致用户重复操作,用户体验不好。
34.12.2AlertDialog介绍
Android系统已经提供了AlertDialog类创建AlerDialog,有以下特性:1 此提示框属于模态提示框,在显示此提示框的时候,用户点击屏幕上的任何区域,都由此提示框响应用户的点击操作,程序的主界面不响应用户操作;即使点击返回按钮,也无响应。
2 当用户点击提示框区域的时候,只有点击到提示框按钮所在的区域,才会响应用户操作;如果用户点击非提示框区域的时候,会关闭提示框。
3 此提示框的创建属于非单例模式,也就是可以连续创建多个提示框,在屏幕上重叠显示。
在APP的某些界面,可能会连续向服务器发送多个请求,如首页;这时如遇到服务器异常的状况,每个请求接口都会报错,这样会在当前界面显示多个提示框,用户需要操作多次,才能关闭所有的提示框,用户体验不好。
针对上述特性,实现了一个AlertDialog工具类,进行如下改进:
1 在显示提示框的时候,屏蔽用户点击非提示框区域,关闭提示框的功能,以免用户还没来及看清提示信息,不小心碰到屏幕,提示框就关闭了。
2 使用单列模式创建提示框,以免屏幕上显示多个重叠的提示框。
具体代码如下:
publicclass AlertDialogUtil {
private static AlertDialog.Builderbuilder;
public static void showAlertDialog(
final Context context, StringmessageText) {
//使用静态变量避免重复创建提示框
if (builder == null) {
builder = newAlertDialog.Builder(context);
builder.setTitle("提示")
.setIcon(R.drawable.ic_launcher)
.setMessage(messageText)
//参数设为false,屏蔽用户点击非提示框区域,关闭提示框的功能
.setCancelable(false)
.setPositiveButton("确定",
newDialogInterface.OnClickListener() {
@Override
public voidonClick(DialogInterface dialog, int which) {
dialog.dismiss();
builder =null;
}
}).create().show();
}
}
}
使用方式如下:
AlertDialogUtil.showAlertDialog(this,"AlertDilalog 显示提示信息");
34.12.3Toast介绍
Android系统提供的Toast的特性如下:1 此提示框属于非模态提示框,在显示此提示框的时候,程序的主界面可响应用户操作。
2 Toast显示的时间可以设置成2秒或3.5秒:
static final intLONG_DELAY = 3500;
static final intSHORT_DELAY = 2000;
在显示的时候,如果切换到新界面,Toast还是会显示,直到时间耗尽才消失。
如有多个TAB页,在TAB1显示Toast,切换到TAB2后,可能还会继续显示;或从一个Activity界面跳转到另一个Activity界面的时候,同样如此。
Android提供了关闭Toast的函数cancel(),可以在显示时间耗尽前关闭Toast。
3 此提示框的创建也属于非单例模式,也就是可以连续创建多个提示框,在屏幕上重叠显示。
针对上述特性,实现了一个Toast工具类,进行如下改进:
使用单列模式创建提示框,以免屏幕上显示多个重叠的提示框。
publicclass ToastUtil {
private static Toast toast;
public static void showToast(Contextcontext,
String messageText, int duration) {
//使用静态变量避免重复创建提示框
if (toast == null) {
toast = Toast.makeText(context, messageText,duration);
} else {
toast.setText(messageText);
}
toast.show();
}
publicstatic void dismissToast () {
toast.cancel();
}
}
使用方式如下:
ToastUtil.showToast(this,"Toast 显示提示信息",Toast.LENGTH_LONG);
ToastUtil.dismissToast();
注意事项:
在创建Toast的时候,会用到Context参数:或是Application对应的Context、或是Activity对应的Context;这就需要在销毁Application或Activity时,主动关闭Toast,释放资源,否则会有短暂的内存泄露。
34.12.4Snackbar介绍
Android系统提供的Snackbar的特性如下:1 此提示框属于非模态提示框,在显示此提示框的时候,程序的主界面可响应用户操作。
2 Toast显示的时间可以设置成1.5秒或2.75秒:
private staticfinal int SHORT_DURATION_MS = 1500;
private staticfinal int LONG_DURATION_MS = 2750;
在显示的时候,如果切换到新界面,Snackbar还是会显示,直到时间耗尽才消失。
如有多个TAB页,在TAB1显示Toast,切换到TAB2后,可能还会继续显示;或从一个Activity界面跳转到另一个Activity界面的时候,同样如此。
Android提供了关闭Snackbar的函数dismiss(),可以在显示时间耗尽前关闭Snackbar。
3 此提示框的创建属于单例模式,如果连续创建多个Snackbar,只会显示最后创建的那个。
4 Snackbar也可以像Dialog那样响应用户点击操作。
5 Snackbar不像AlertDialog和Toast那样默认显示在屏幕中部,而是显示在屏幕底部。
Snackbar的使用代码如下:
//连续创建两个Snackbar,但屏幕上只会显示最后创建的Snackbar
Snackbar.make(mView,"Snackbar显示提示信息",
Snackbar.LENGTH_SHORT).show();
Snackbar.make(mView, "Snackbar显示第二个提示信息",
Snackbar.LENGTH_SHORT).show();
//响应用户操作的Snackbar
Snackbarsnackbar = Snackbar.make(mView, "Snackbar响应用户操作",Snackbar.LENGTH_SHORT)
.setAction("确定", new View.OnClickListener(){
@Override
public void onClick(Viewv) {
AlertDialogUtil.showAlertDialog(MainActivity.this,"AlertDilalog 显示提示信息");
}
});
Snackbar.show();
//关闭Snackbar
Snackbar.dismiss();
即使Snackbar能够响应用户操作,但还是会在设置的显示时间到后,自动消失。Google似乎也不推荐这样使用Snackbar,在其文档中有如下说明:
Note: A Snackbar automaticallygoes away after a short time, so you can't
count on the user seeing the messageor having a chance to press the button. For this reason, you should consideroffering an alternate way to perform any Snackbar action.
(https://developer.android.com/training/snackbar/action.html)
注意事项:
在创建Snackbar的时候,会用到View参数;这就需要在销毁View时,主动关闭Snackbar,释放资源,否则会有短暂的内存泄露。
Google推荐用Snackbar代替Toast,从上述分析也可看出Snackbar可以替代Toast,且使用更简单方便。
相关文章推荐
- Unity&Shader案例篇—屏幕渐暗效果
- Android 6.0 动态权限申请
- Android图片加载库—Glide 最全面解析用法
- iOS绘图系统(二) Core Animation (读书笔记)
- Toast源码分析
- 安卓解决65535dex文件方法数越界,IllegalArgumentException问题
- Unity&Shader案例篇—绘制雨滴
- android开发学习——day3
- 凤姐公众号被封 一天曾涨粉20万
- 我的Android开发探索之环境搭建
- IOS真机测试(用证书进行真机测试)
- iOS进阶(二)之子项目开发
- Dialog源码分析
- 二次封装图片第三方框架——简单工厂模式的运用
- 广播的详解
- iOS多线程之8.NSOPeration的其他用法
- Android 实现点击出现选择框,或者长按显示选择界面,PopupMenu的简单使用。
- android 窗口类型分析
- ijkplayer-android的简单使用
- 浅谈微信小程序