APP开发实战150-Android 提示功能设计(AlertDialog、Toast和Snackbar的使用)
来源:互联网 发布:淘宝开放平台接口 编辑:程序博客网 时间:2024/05/29 18:09
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,且使用更简单方便。
- APP开发实战150-Android 提示功能设计(AlertDialog、Toast和Snackbar的使用)
- Android开发中提示框Toast、AlertDialog的使用!
- Android开发笔记:类似Toast的提示控件:SnackBar
- Android 信息提示Dialog、Toast和Snackbar
- Android 活用提示窗Toast和Snackbar
- Android中AlertDialog和Toast的使用
- Android中AlertDialog和Toast的使用
- Android中AlertDialog和Toast的使用
- Android中AlertDialog和Toast的使用
- Android提醒技巧,Dialog、Toast和Snackbar的使用区别
- Android消息提示:AlertDialog、Toast、Notification的使用
- Android中snackBar的使用【替换Toast】
- Android开发笔记(一百二十七)活用提示窗Toast和Snackbar
- Dialog、Toast、Snackbar的区别和使用
- Dialog Toast 和 Snackbar的使用经验
- Dialog、Toast、Snackbar的区别和使用
- APP开发实战168-APP快捷图标的功能设计
- Android checkbox和radiobutton 以及Toast和AlertDialog的使用
- javascript基础:函数传递参数的方式、参数数组、变量范围(变量作用域)
- [LeetCode]410. Split Array Largest Sum
- Linux文件系统和底层驱动的笔记
- Node.js 的模块系统
- jenkins的具体搭建和使用—使用tomcat容器
- APP开发实战150-Android 提示功能设计(AlertDialog、Toast和Snackbar的使用)
- Listview源码解析(一)
- Docker基础命令
- sendEmptymessage 和sendMessage的区别
- jdbc:oracle:thin:@192.168.3.98:1521:orcl
- Apache Commons Betwixt
- Bellman-Ford算法详讲
- url加时间戳避免再次请求当前路径出现的缓存问题
- 标准IO_输入api_上