![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=1738837012-lGHQ3HbgRPdcjdqey7B1XOJiBuhsZG0g-0-2277be987c23d371106e519ce91814e0)
图4.44 工程布局
main.xml的代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P141_161952.jpg?sign=1738837012-sXPylZEL651OPF4cX2ojsP4Ta7ZdpeLI-0-084451791a675374fc331f63a54e9a0c)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_161953.jpg?sign=1738837012-xVgvBNQZQmMYB7kVFzojPbA7O5ZWS8Gg-0-877725dcf5c7a8c817974fd93f8e78f8)
在NotificationDemoActivity中为每个按钮添加事件响应。单击Toast按钮,运行效果如图4.45所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_97968.jpg?sign=1738837012-2Bj21Rd3I325kNNRFKRGNLVFOO9NncsG-0-4d81289d01e37a2e742224bb7bacc536)
图4.45 单击Toast按钮的效果
相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_161954.jpg?sign=1738837012-6enM0ScgCzWDbmWhh2hluiXb1iHmQO1P-0-5168346e385b9c30dff4edea3e6719f8)
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=1738837012-Sh8bmWJyAPMRV2LJjEtVkZ6KSxR5h0wZ-0-be2302fcbe2adb601d7b8541419070e3)
显示效果如图4.46所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P142_97971.jpg?sign=1738837012-cHVgNqEde7sQ9zbacNoD2ECFwnJWqvsm-0-ff8f7073bb06ad15ad83cf8393a06b3d)
图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=1738837012-mZqhxv70EQ1qMFI1w1vyVEMsOfPMIkMX-0-eaf6884e82e7743de72af8ed3df4dc1e)
图4.47 单击Notification按钮的效果
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_97979.jpg?sign=1738837012-oLtahZ8Dx9FwdQVJestEuLZNGq60GMpu-0-469040165db9b67e926956e75421736c)
图4.48 下拉Notification的效果
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_97982.jpg?sign=1738837012-2mpssMTJJ7zLfntuk4nxZZiX3aT3wH4j-0-acf99aef6360cc38c01388175a9ce114)
图4.49 单击图标的效果
相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P143_161963.jpg?sign=1738837012-YsiYAGOorCIH6yaBHVMlSYw8UWXrCqrs-0-2f832cc1d9d157f78efe4f0033e7955b)
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=1738837012-iyweNriYE4xbZrqArtZzJeKOWDjthgCJ-0-e612aa646527cb2b869ddf26835b2dce)
NoteActivity所使用的布局文件other.xml的代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P145_161966.jpg?sign=1738837012-2wPzFSJf5TrlHBqeY50eCqUEsBQZIzIP-0-4fbc777a12abae013471d9f1fcb7d9bb)
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=1738837012-aYc2VOYoL82o0zNaMZsLYzMXzhVEUSKo-0-67d174771ce654d3e5a349cf61f3db8c)
图4.50 NotiDemo布局
该布局对应内容为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P145_161967.jpg?sign=1738837012-co3NRDrEp3zjPxN8FRlPDZDFqOGuFDNq-0-c124443e2dd5a247104c956f254faf2c)
MainActivity.java的代码为:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P146_161969.jpg?sign=1738837012-bl4gOA44GYUVDKEhaCCGL3JgMOPIlgIb-0-06512a13a13e07d7bf28d8bcc6fda912)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P147_161970.jpg?sign=1738837012-WMy3LyIwgnws3O3iHrILSMWTgReFjbjj-0-b96de2b75e6720b9b9d9edab625dc773)
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P148_161971.jpg?sign=1738837012-i04E4brtAHmRHdaKBTBW8lItRroCg510-0-5b3646d12bc62623e79abb1d4e2be00b)
对应的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=1738837012-i7howOgzqH3J5tgyAinwhsr7jasDMQsA-0-58692e7131c9cf3a677152006c97dba9)
图4.51 运行效果
Android N通过NotificationCompat类构建通知的模板信息,例如通知的图标、通知的标题、通知的内容、通知是否需要进行分组等,然后由NotificationCompat构建Notification通知对象,并由NotificationManager发送通知。相关代码如下:
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P149_161974.jpg?sign=1738837012-TQmeNiwPzjNAwAyANpOoAqhGYOM96gvv-0-64280de14d8f5a1d7ac64a05944c2d80)
在设置了通知分组的情况下,Android N会自动将同一个应用的通知进行合并分组实现,Android N可以通过NotificationCompat设置通知分组的显示消息。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P149_161975.jpg?sign=1738837012-eG00Y9uIUVKaGNP5BSk56HX5MQgTEUI6-0-934e633db46d5a433364797eac64e338)
默认情况下,通知栏会分别显示每条通知。当产生的通知数目较多时,之前的通知会被折叠,并以“+折叠通知数目”的方式进行显示,如图4.52所示。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P150_99554.jpg?sign=1738837012-1AUtIZRsgd8UHAVg5J1ImppTly4yMq87-0-37e9475e49f2ed4cbcc75c418825c914)
图4.52 通知分组和折叠效果
将折叠效果下的通知分组下拉,会得到非折叠效果的通知列表,如图4.53所示。而这也是不进行通知分组折叠时的效果,即NotificationCompat不进行setGroup设置时的效果。
![](https://epubservercos.yuewen.com/61AB18/17214369604808106/epubprivate/OEBPS/Images/Figure-P150_99555.jpg?sign=1738837012-c5HBG1ej9FSFDgTNIF41bPXTd1AuaVb8-0-e6ac6edc843267764368b0aa3de2a3d3)
图4.53 非折叠的通知列表