说到信息提示,Dialog、Toast和Snackbar是三种常见的提示方式。
Dialog是给出提示信息并让用户根据提示判断操作,它会阻断用户原本正在进行的动作,不得不对提示信息进行处理,如果一个用户正在做一个重要的操作,突然弹出的Dialog会遮挡住他原本的操作层,这种强干扰可能会带来糟糕的用户体验。
Toast的提示是告诉用户发生了什么事情,不会阻挡用户的操作,用户也没办法操作通知项,只能被动地接受这个提示信息。Toast的使用风险主要是敏感操作,比如说删除数据,只告诉用户信息删除成功,而不给用户选择的机会,用户可能要抓狂、抱怨、离开。
在使用Toast提示弹窗时有一个小技巧,为了避免多次点击后Toast反复弹出,长时间关闭不掉,可以将Toast的调用封装成一个接口,写在一个公共的类当中,在调用时先判断Toast对象是否为空,如果为空,再调用makeText()方法来去生成一个Toast对象,否则就直接调用setText()方法来设置显示的内容,最后再调用show()方法将Toast显示出来。
调用时只需要把Context对象和Toast要显示的内容传进来:Util.showToast(context, "things happened");
Snackbar是一种中庸的解决方法,它的展示效果类似于Toast,会从屏幕的底部弹出来,另外,Snackbar上面可以加入交互按钮,比如给用户一个Undo选项,从而带来较好地用户体验。在使用Snackbar之前,首先需要在app/build.gradle中添加相应的依赖:dependencies { compile'com.android.support:design:23.4.0'}。然后就可以使用Snackbar了,它的用法和Toast是比较相似:
这里调用Snackbar的make()方法来创建一个Snackbar对象,make()方法的第一个参数需要传入一个view,只要是当前界面布局的任意一个view都可以,Snackbar会使用这个view来自动查找最外层的布局,用于展示Snackbar。第二个参数就是Snackbar中显示的内容,第三个参数是Snackbar显示的时长。接着这里又调用了一个setAction()方法来设置一个动作,从而让Snackbar不仅仅是一个提示,而是可以和用户进行交互的。最后调用show()方法让Snackbar显示出来。
用户场景举例:当提示的信息至关重要,并且必须由用户做出决定时使用Dialog,比如退出账号或删除信息时,需要用户二次确认。
用户完成动作后或者出现异常情况时的提示,使用Toast比较合适,提示信息显示几秒后自动消失。例如用户刷新微博时提示用户更新了多少数据,在网络出现异常时提示用户网络不佳。旨在提醒用户处于某种状态,同时不增加用户的操作成本。
红点提示:通过红点告诉用户有新的信息或内容可以查看,并可以引导用户去点击查看内容/信息,例如更新或者发布新的版本。
数字提示,常见的场景为消息列表的提醒和手机桌面APP右上角消息数量的提示,精确直观地告诉用户新的信息数量,更能够激发用户点击操作的行为。
其他个性化的提示:根据用户的使用情况给出个性化的提示,如希望用户下载新推出的新版本时,又或者用户使用某付费项目需要续费时。这样的提示往往会以文字或卡片的形式展示在界面上,不会立即消失,也无需立即操作,在适当的时候给出适当的提示,很贴心,又不会打扰到用户,能够带来不错的用户体验。