![Android 7应用程序开发教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/574/31794574/b_31794574.jpg)
4.8 Toast和Notification
Toast和Notification是Android系统为用户提供的轻量级的信息提醒机制。这种方式不会打断用户当前的操作,也不会获取到焦点,非常方便。
本节我们通过实例学习Toast和Notification的使用方法。
4.8.1 Toast
创建工程NotificationDemo,并实现如图4.44所示的布局。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P141_97677.jpg?sign=1738850985-kDhFeUItJI7y9vKsd8nOY7SQcFHOoGYZ-0-60fd24194e071ed9496503a406791922)
图4.44 工程布局
main.xml的代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P141_161952.jpg?sign=1738850985-0oKdcvVyfCFQIgwE2UzhdgEtt1J2REgH-0-ac5b01f08aa40c14f31d0890d843e0a7)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_161953.jpg?sign=1738850985-of3SL4s52A9tRIqBmABLNcihW9h5zFPr-0-9fb2a72c6a62548832516f570dd7c8ee)
在NotificationDemoActivity中为每个按钮添加事件响应。单击Toast按钮,运行效果如图4.45所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_97968.jpg?sign=1738850985-i9riry8OaBJwsswzcG4ADfvTsO5p15d0-0-5d3760d7b3ee55920fcae6e07ec56062)
图4.45 单击Toast按钮的效果
相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_161954.jpg?sign=1738850985-06SMcQBXATh3Lv5vAdhG7SHH3bW4Ef54-0-fd935574e59417d7d1eed1cbd2417fb1)
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的显示位置。例如如下代码:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_161958.jpg?sign=1738850985-p8pwHiO8cnu2qaGwRKG2cBH6bKrbiNsp-0-3b1f3558453558c6dd6ef930bf8b437a)
显示效果如图4.46所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_97971.jpg?sign=1738850985-gEDry0VS1U8OyZM152NtgaI5yOH5IFaa-0-09ba6e8f85efc133711c3d54412a576c)
图4.46 显示效果
4.8.2 Notification
Notification可以在手机屏幕顶部的状态栏显示一个带图标的通知,同时播放声音或者使手机震动。Notification可以扩展以显示详细信息,单击该Notification还可以跳转到特定的Activity。
单击Notification按钮,运行效果如图4.47所示,在视图的状态栏出现Notification提示。按住Notification并下拉,可将Notification内容进行扩展,效果如图4.48所示。单击图标处,应用程序跳转到NoteActivity视图,运行效果如图4.49所示。单击“返回”按钮,返回到NotificationDemoActivity视图。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_97978.jpg?sign=1738850985-CCq7MyqxbQ96SPVVIFVOmAMbluZ1QvKA-0-7279a03eb3c8245528ef252ff857df44)
图4.47 单击Notification按钮的效果
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_97979.jpg?sign=1738850985-4Jhg6yRswxEMekxJhRsH3fCPnhKCIchu-0-6f9d4f92d7d8db0f9fd6563ae3489727)
图4.48 下拉Notification的效果
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_97982.jpg?sign=1738850985-WueBqhPuaNsAXpvobSR7W5ARYYHmN1g6-0-1098fc8a437e542ab555a74f0f5e5b2c)
图4.49 单击图标的效果
相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_161963.jpg?sign=1738850985-i7OFTmMlRXxT8DdIPV88LUiVEtJasbWZ-0-223db052484f9db94de28295a9cc88a5)
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的代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P144_161965.jpg?sign=1738850985-onigltFPEo5aQat5Lpam4rvDjVE89Pzs-0-149a6f7611e36f8ffc722ad3a81132e6)
NoteActivity所使用的布局文件other.xml的代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P145_161966.jpg?sign=1738850985-qHaVeUdJAguWc7LGNwlRq9surTVbGvJt-0-2171edf996f01dafcddbebdca1af6a66)
4.8.3 Notification Group
当一个应用程序产生多个通知时,Android N提供了新的API,支持将多个通知进行分组和折叠显示,同时告诉用户共有多少个通知,并且给出一个关于通知的摘要消息。实例NotiDemo演示了这一功能,其界面很简单,布局如图4.50所示。当每次点击NOTIFY按钮时,该应用会产生一个通知消息,而按钮下方的TextView会显示当前应用共产生了多少个通知。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P145_98451.jpg?sign=1738850985-o9iHen3BcbzNB1Qucl66NlNY6DS06hXO-0-302997376687270398168e3b04d2b79e)
图4.50 NotiDemo布局
该布局对应内容为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P145_161967.jpg?sign=1738850985-Yn59hY87RQdo8MKj2sDsVMa6uzYHIU12-0-2ab476fd9b1363ba0e9b64dc35286b23)
MainActivity.java的代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P146_161969.jpg?sign=1738850985-6NeQZ0xEIjTjoLFpBy2rIfaPBRVwY2Cz-0-3908b4191e7357d478378bed39880df3)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P147_161970.jpg?sign=1738850985-WQJvII3JoT18io7ygKqohImkBWIhR9BV-0-b1121e2d567d481c6dfb04080040390f)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P148_161971.jpg?sign=1738850985-KId51YNelFAnvRukdlwuMG65KpGj8IsL-0-e7708df25f5cd742632a8340e4f33fc5)
对应的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所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P149_99441.jpg?sign=1738850985-AQRY138OnD4qci1E9pzKIgp6crpE5MFH-0-ff2d696153356222451329b47be82cb4)
图4.51 运行效果
Android N通过NotificationCompat类构建通知的模板信息,例如通知的图标、通知的标题、通知的内容、通知是否需要进行分组等,然后由NotificationCompat构建Notification通知对象,并由NotificationManager发送通知。相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P149_161974.jpg?sign=1738850985-w4b2nzo7HhADRsIR9cp7ZmaH1MWxjLoc-0-837032f4e107dab0b3c4b33d12c8efe3)
在设置了通知分组的情况下,Android N会自动将同一个应用的通知进行合并分组实现,Android N可以通过NotificationCompat设置通知分组的显示消息。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P149_161975.jpg?sign=1738850985-NNdNXckEonVNWOuoZFX6CuNUXn5YGpmB-0-185344632581729e24122ddca37580a8)
默认情况下,通知栏会分别显示每条通知。当产生的通知数目较多时,之前的通知会被折叠,并以“+折叠通知数目”的方式进行显示,如图4.52所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P150_99554.jpg?sign=1738850985-qv0MTeZ96AFK0TH2XRxWNxjLNocONEqH-0-d5f54bed4911dfe71489fdba5a6d4135)
图4.52 通知分组和折叠效果
将折叠效果下的通知分组下拉,会得到非折叠效果的通知列表,如图4.53所示。而这也是不进行通知分组折叠时的效果,即NotificationCompat不进行setGroup设置时的效果。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P150_99555.jpg?sign=1738850985-De64q7eAfirls6HJVilPqdsVr3pQKENP-0-4374ac8cdd9d833503370ab974410156)
图4.53 非折叠的通知列表