Android Notification (转)
上回我们提到在4.0ICS之后,Google为Android平台的Notification这把“倚天剑”注入了更多新鲜的元素,使其更加实用美观。Notification的样式从此变得丰富起来,以适应于不同情景的需要。就像最近非常流行的神曲《江南style》一样,在世界各个角落出现了各种方言的版本,为不同肤色、民族、信仰的人们所接受和喜欢。本文我们就来耍耍这把“倚天剑”的各种style--各种样式的通知。
一个通知就是一条消息,显示在你的应用程序之外的界面(通知栏)。当你告知系统需要发布一个通知时,它首先作为一个icon出现在状态栏区域。为了进一步了解它的细节,用户可以下拉状态栏展开至通知栏查看。
备注:除非特别注明以外,本文所提到的Builder均为v4 Support Library中NotificationCompat.Builder,它在4.0ICS之后才引入。而Notification.Builder引入于3.0HoneyComb。
一、通知视觉元素
通知有两种可视化样式,取决于版本和drawer的状态:
标准视图:在通知drawer中显示标准视图的通知。
大型视图:当通知被展开时可以看到的一个大型视图。该视图也是扩展通知的一部分,该特征引入于4.1Jerry Bean。
1.正常视图
一个出现在标准视图中的通知,其高度是64dp。即使你使用大型视图创建一个通知,它仍然出现在标准视图中直至被展开。下面是一个正常视图的范例:
“1”:内容标题,“2”:大型图标,“3”:内容文本,“4”:内容附加,“5”:小型图标,“6”:发布时间,可以使用setWhen()方法设置一个明确值。
2.大型视图
大型视图只有当通知被展开时才能出现,并且该通知必须位于通知drawer的顶部。用户可以借助手势(双指水平滑动或垂直滑动)展开或合拢它。可扩展的通知这一特征引入于4.1Jerry Bean。下面是一个收件箱样式的通知范例:
细心的读者已经发现,大型视图的视觉元素与正常视图共享。不同之处在于“7”:通知细节区域。对于此区域的显示内容,各种大型视图通知有着不同的设置:
Big picture style:细节区域展现一个高度为256dp的bitmap。
Big text style:细节区域显示一个大型文本块。
Inbox style:细节区域包含文本行数。
另外,如下的两个通知视觉元素仅支持大型视图,所以采用标准视图的请“靠边站”^-^:
Big content title:允许你添加一个标题去覆盖正常视图的内容标题,但它只能出现在可扩展的视图中。
Summary text:允许你在细节区域底端添加一行文本。
二、创建通知要素
你想在NotificationCompat.Builder对象中为通知指定UI信息和动作,就必须先使用NotificationCompat.Builder.build()方法来创建一个通知。该方法返回一个Notification对象,对了发布这个Notification对象,可以通过调用NotificationManager.notify()方法来传递它到系统中。
1.必选的通知内容
如下的三个通知视觉元素是必选的:
setSmallIcon():设置一个小型icon
setContentTitle():设置一个内容标题
setContentText():设置内容细节文本
2.可选的通知内容
除1所述的三个以外都是可选的^-^,详情可参考API NotificationCompat.Builder类。
3.通知的动作
虽然动作是可选的,你应该至少添加一个动作到通知中。一个动作允许用户从通知直接导航到应用程序的一个Activity中。在Activity中你将看到一个或更过的事件或是做进一步的工作。一个通知能够提供多个动作。你应该总是能够定义一个动作,当用户点击通知时触发它。通常这个动作会帮你打开一个应用程序的Activity。在4.1Jerry Bean之后,你还可以在通知中添加按钮来执行额外的动作(如:一个警告或即时响应的文本消息等)。前提是这些按钮的功能在Activity中可用。
在一个通知里,其动作是通过一个含有能打开一个应用程序的Activity的意图的PendingIntent对象来定义的。使用手势附带PendingIntent对象,再调用NotificationCompat.Builder对象中的合适方法。例如:当用户在drawer中点击通知文本的时候,如果你想要打开一个Activity,可以通过调用setContentIntent()方法来添加一个PendingIntent对象。
用户点击通知启动一个Activity是最常见的情景。你也可以在用户销毁一个Activity的时候开启一个Activity。但请注意的是只有在4.1Jerry Bean之后,才能在drawer中通过点击一个按钮来启动一个Activity。欲知更多信息,可查阅NotificationCompat.Builder的相关指南。
4.兼容性处理
并不是所有通知的功能都能用于特定的版本。例如动作按钮只能用于4.1Jerry Bean之后。因为只有从这个版本往后才有可展开的通知出现。为了确保达到最好的兼容性,请使用NotificationCompat及其子类创建通知,最好是NotificationCompat.Builder。此外,当你实现一个通知时,请遵循如下过程:
(1).无论用户使用什么版本,都应该提供通知所有的功能给所有用户。为了做到这一点,需要在一个Activity中验证所有功能是否可用。有时候你可能需要添加一个新的Activity。例如:当你想调用addAction()方法来控制媒体停止和播放时,首先应该在一个Activity中实现这个功能。
(2).当用户点击通知时,确保所有用户点击后都能启动一个界面。我们需要为Activity创建一个PendingIntent对象。然后调用setContentIntent()方法将PendingIntent对象添加到通知中去。
(3).现在可以在你想要使用的通知中添加可展开的特征。记住一点,当用户点击通知时,对于那些你想要添加到通知的功能,要保证它们在Activity中也是可用的。
三、创建标准样式通知
1.案例代码陈列
Notification normalNoti = new NotificationCompat.Builder(this)
.setAutoCancel(true) // 设置自动清除
.setContentInfo(String.valueOf(++normalNum)) // 设置附加内容
.setContentTitle("5 new messages") // 设置内容标题
.setContentText("lynnli1229@gmail.com") // 设置内容文本
.setDefaults(Notification.DEFAULT_ALL) // 设置使用所有默认值(声音、震动、闪屏等)
.setLargeIcon(icon) // 设置大型图标
.setSmallIcon(R.drawable.stat_notify_gmail) // 设置小型图标
.setTicker("Normal Notification") // 设置状态栏提示信息
.build();
2.案例效果展示
四、创建收件箱样式通知
1.案例代码陈列
Notification inboxNoti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentInfo(String.valueOf(++inboxNum))
.setContentTitle("5 new mails")
.setContentText("lynnli1229@gmail.com")
.setDefaults(Notification.DEFAULT_ALL)
.setLargeIcon(icon)
.setSmallIcon(R.drawable.stat_notify_gmail)
.setTicker("Inbox Notification")
.setStyle(new NotificationCompat.InboxStyle() // 设置通知样式为收件箱样式
.addLine("M.Lynn reminder")
.addLine("M.Lynn launch")
.addLine("M.Lynn hello")
.setSummaryText("+3 more")) // 设置在细节区域底端添加一行文本
.build();
2.案例效果展示
Notification bigtextNoti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentInfo(String.valueOf(++bigtextNum))
.setContentTitle("New mail")
.setContentText("lynnli1229@gmail.com")
.setDefaults(Notification.DEFAULT_ALL)
.setLargeIcon(icon)
.setSmallIcon(R.drawable.stat_notify_gmail)
.setTicker("BigText Notification")
.setStyle(new NotificationCompat.BigTextStyle() // 设置通知样式为大型文本样式
.bigText("Helper class for generating large-format notifications that include a lot of text. This class is a \"rebuilder\": It attaches to a Builder object and modifies its behavior, like so."))
.build();
2.案例效果展示
六、创建大型图片样式通知
Notification bigpictureNoti = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setContentInfo(String.valueOf(++bigpictureNum))
.setContentTitle("New photo")
.setContentText("lynnli1229@gmail.com")
.setDefaults(Notification.DEFAULT_ALL)
.setLargeIcon(icon)
.setSmallIcon(R.drawable.stat_notify_gmail)
.setTicker("BigPicture Notification")
.setStyle(new NotificationCompat.BigPictureStyle() // 设置通知样式为大型图片样式
.bigPicture(BitmapFactory.decodeResource(getResources(), R.drawable.fantasy)))
.build();
2.案例效果展示
http://www.cnblogs.com/dyllove98/archive/2013/06/08/3127580.html
Android Notification (转)的更多相关文章
- Android Notification 详解(一)——基本操作
Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...
- Android Notification 详解——基本操作
Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...
- 3、android notification 详细用法
在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以确认保存成功. * 如果应用程序在后台 ...
- android notification 传值关键
android notification 传值关键在 onNewIntent方法里获取 @Override protected void onCreate(Bundle savedInstanceSt ...
- Android NOtification 使用(震动 闪屏 铃声)
一. Notification 简介 在 android 系统中,在应用程序可能会遇到几种情况需要通知用户,有的需要用户回应,有的则不需要,例如: * 当保存文件等事件完成,应该会出现一个小的消息,以 ...
- Android Notification通知详细解释
Android Notification通知具体解释 Notification: (一).简单介绍: 显示在手机状态栏的通知. Notification所代表的是一种具有全局效果的通 ...
- Android Notification实现推送消息过程中接受到消息端有声音及震动及亮屏提示
在Android Notification状态栏通知一文中,简单实现了消息的推送效果,这里就接着上文说一下,当用户接受到消息时的提示效果 // 5-增加震动及声音及亮屏 notification.de ...
- Android Notification通知简介
Android Notification通知简介 根据activity的生命周期,在activity不显示时,会执行onStop函数(比如按下home键),所以你在onStop函数(按退出键除外)里面 ...
- Android Notification状态栏通知
没有添加额外的震动及声音效果,这里直接实现了通知的功能,看效果吧: MainActivity.java package com.example.notification; import android ...
- Android Notification 消息通知 相关资料.md
目录 Android Notification 消息通知 相关资料 Android 5.0 Lollipop (API 21)无法正常显示通知图标,只能看到一个白色方块或灰色方块的问题 解决方案 参考 ...
随机推荐
- strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能
strchr,wcschr 和strrchr, wcsrchr,_tcschr,_tcsrchr功能 (1) char *strchr( const char *string, int ...
- IOS设计模式学习(11)中介者
1 前言 面向对象的设计鼓励把行为分散到不同对象中.这种分散可能导致对象之间的相互关联.在最糟糕的情况下,所有对象都彼此了解并相互操作.但是增加的相互关联又减少了获得的益处.增加的关联似的对象很难或不 ...
- WinForm、wpf、silverlight三者关系
最近在学C#.NET,基本语法学习的差不多了,接下来准备学习图形界面设计部分.但是我目前对于.NET的WinForm.wpf.silverlight这三者的关系弄的不是很清楚,一般书中很少介绍wpf和 ...
- rsync+inotify 实现资源服务器的同步目录下的文件变化时,备份服务器的同步目录更新,以资源服务器为准,去同步其他客户端
测试环境: 资源服务器(主服务器):192.168.200.95 备份服务器(客户端):192.168.200.89 同步目录:/etc/test 同步时使用的用户名hadoop密码12345 实验目 ...
- Android 深入解析光传感器(二)
光线传感器演示1 讲了一大堆的理论,那么以下的样例就来展示一下光线感应器的使用.为什么充分展现光感的用法,我这个样例写的很easy,仅仅写了使用光感必须的代码,然后用了几个textVie ...
- BZOJ 2431 HAOI2009 在列的数目的顺序相反 递归
标题效果:乞讨1~n有都布置在物种的数目相反的顺序k计划数 订购f[i][j]对于前者i原子的反向排列的数j计划数 因此,我们将第一i插入的数1~i-1该装置 能生产0~i-1反向对 再就是 f[i] ...
- C++ Primer 学习笔记_33_STL实践与分析(7) --容器适配器
STL实践与分析 --容器适配器 引: 除了顺序容器.标准库还提供了三种顺序容器适配器:queue,priority_queue和stack.适配器是标准库中的概念.包含容器适配器,迭代器适配器和函数 ...
- NYOJ 118 路方案(第二小的跨越)
修路方案 时间限制:3000 ms | 内存限制:65535 KB 难度:5 描写叙述 南将军率领着很多部队,它们分别驻扎在N个不同的城市里,这些城市分别编号1~N.因为交通不太便利,南将军准备修 ...
- 关于WCF的引用,添加服务和添加web服务的区别
原文:关于WCF的引用,添加服务和添加web服务的区别 本章内容主要是根据我做的实验来阐述这2种添加服务针对WCF的不同之处,我们按照示例一步一步来看. 如下是工程的结构: 该WCF服务是通过控制台程 ...
- 添加服务引用和添加Web引用对比
原文:添加服务引用和添加Web引用对比 在WindowsForm程序中添加服务引用和Web引用对比 为了验证书上有关Visual Studio 2010添加服务引用和Web引用的区别,进行实验. 一. ...