
4.8 Toast和Notification
Toast和Notification是Android系统为用户提供的轻量级的信息提醒机制。这种方式不会打断用户当前的操作,也不会获取到焦点,非常方便。
本节我们通过实例学习Toast和Notification的使用方法。
4.8.1 Toast
创建工程NotificationDemo,并实现如图4.44所示的布局。

图4.44 工程布局
main.xml的代码如下:


在NotificationDemoActivity中为每个按钮添加事件响应。单击Toast按钮,运行效果如图4.45所示。

图4.45 单击Toast按钮的效果
相关代码如下:

Toast用于向用户显示小信息量的提示,它不会中断应用程序进程,不会对用户操作造成任何干扰,也不能与用户交互,在信息显示后会自动消失。此处使用Toast.makeText(Context context,CharSequence text, int duration)方法来创建一个Toast。其中,context指显示Toast的上下文;text指Toast中显示的文字内容;duration指Toast显示延续的时间,该时间可以直接指定,也可以使用Toast提供LENGTH_LONG和LENGTH_SHORT常量。Toast.show()方法可以将Toast对象显示出来。Toast默认情况下显示在屏幕的下方,可以通过Toast.setGravity()方法设置Toast的显示位置。例如如下代码:

显示效果如图4.46所示。

图4.46 显示效果
4.8.2 Notification
Notification可以在手机屏幕顶部的状态栏显示一个带图标的通知,同时播放声音或者使手机震动。Notification可以扩展以显示详细信息,单击该Notification还可以跳转到特定的Activity。
单击Notification按钮,运行效果如图4.47所示,在视图的状态栏出现Notification提示。按住Notification并下拉,可将Notification内容进行扩展,效果如图4.48所示。单击图标处,应用程序跳转到NoteActivity视图,运行效果如图4.49所示。单击“返回”按钮,返回到NotificationDemoActivity视图。

图4.47 单击Notification按钮的效果

图4.48 下拉Notification的效果

图4.49 单击图标的效果
相关代码如下:

Notification.Builder是Android API Level 11以上版本提供的Notification的创建类,可以方便地创建Notification并设置各种属性。此处创建了一个Notification,并指定了显示内容和图标。Notification.setLatestEventInfo()方法设定了当用户扩展Notification时显示的样式,并通过PendingIntent对象指定了当用户单击扩展的Notification时应用程序如何跳转,此处跳转至NoteActivity。NotificationManager.notify(int id,Notification notification)方法为Notification对象指定一个ID值,并将该Notification对象显示到状态栏上。NotificationManager.cancel(int id)方法会将ID指向的Notification对象取消掉。
NoteActivity.java的代码如下:

NoteActivity所使用的布局文件other.xml的代码如下:

4.8.3 Notification Group
当一个应用程序产生多个通知时,Android N提供了新的API,支持将多个通知进行分组和折叠显示,同时告诉用户共有多少个通知,并且给出一个关于通知的摘要消息。实例NotiDemo演示了这一功能,其界面很简单,布局如图4.50所示。当每次点击NOTIFY按钮时,该应用会产生一个通知消息,而按钮下方的TextView会显示当前应用共产生了多少个通知。

图4.50 NotiDemo布局
该布局对应内容为:

MainActivity.java的代码为:



对应的strings.xml代码为:
<resources> <string name="app_name">NotiDemo</string> <string name="active_notifications">目前的通知数目: %1$d</string> <string name="sample_notification_content">这是一个通知的示例。</string> <string name="sample_notification_summary_content">共有 %d 个通知。</string> </resources>
点击NOTIFY按钮,运行效果如图4.51所示。

图4.51 运行效果
Android N通过NotificationCompat类构建通知的模板信息,例如通知的图标、通知的标题、通知的内容、通知是否需要进行分组等,然后由NotificationCompat构建Notification通知对象,并由NotificationManager发送通知。相关代码如下:

在设置了通知分组的情况下,Android N会自动将同一个应用的通知进行合并分组实现,Android N可以通过NotificationCompat设置通知分组的显示消息。

默认情况下,通知栏会分别显示每条通知。当产生的通知数目较多时,之前的通知会被折叠,并以“+折叠通知数目”的方式进行显示,如图4.52所示。

图4.52 通知分组和折叠效果
将折叠效果下的通知分组下拉,会得到非折叠效果的通知列表,如图4.53所示。而这也是不进行通知分组折叠时的效果,即NotificationCompat不进行setGroup设置时的效果。

图4.53 非折叠的通知列表