上回我们提到在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.案例效果展示

 
五、创建大型文本样式通知
1.案例代码陈列
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.案例效果展示

 

六、创建大型图片样式通知

1.案例代码陈列
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.案例效果展示

 

[置顶] Android倚天剑之Notification之江南style相关推荐

  1. Android倚天剑之Notification之江南style

    传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 上回我们提到在4.0ICS之后,Google为Android平台的Notificati ...

  2. android listview标题置顶,Android仿QQ左滑删除置顶ListView操作

    最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...

  3. [置顶] Android自定义控件 芝麻信用分雷达图

    [置顶] Android自定义控件 芝麻信用分雷达图 标签: android自定义雷达芝麻信用 2016-10-23 20:11  3548人阅读  评论(24)  收藏  举报   分类: 自定义控 ...

  4. android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例

    Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...

  5. android imageview 锯齿,[置顶] android 自定义圆角ImageView以及锯齿的处理

    看到很多人开发过程中要使用圆角图片时,解决方法有: 1.重新绘制一张图片 2.通过布局来配置 3.通过重写View来实现 其中1,2在这里就不讲了,重点讲讲方法三的实现. 实现一:通过截取画布一个圆形 ...

  6. [置顶]Android 面试题汇总

    MicrosoftInternetExplorer402DocumentNotSpecified7.8 磅Normal0 面试题基础储备 1.Activity相关 a.Activity的特点 1.可见 ...

  7. [置顶] Android adb root权限

    永久root带文件 因为开发需要,我经常会用到adb这个工具(Android Debug Bridge),我们都知道adb shell默认是没有root权限的,修改系统文件就很不方便了,adb pus ...

  8. [置顶] Android玄铁剑之TextView之图文并茂

    传送门:上一节 玄铁剑         金庸武侠第一神剑!剑魔独孤求败四十岁前持之横行天下,后为神雕侠杨过所得,持之亦无敌于天下.神雕侠隐退前将此剑赠与小东邪郭襄.襄阳城破前,郭靖.黄蓉夫妇请高明工匠 ...

  9. [置顶] Android玄铁剑之TextView之传送门

    传送门:上一节   玄铁剑         金庸武侠第一神剑!剑魔独孤求败四十岁前持之横行天下,后为神雕侠杨过所得,持之亦无敌于天下.神雕侠隐退前将此剑赠与小东邪郭襄.襄阳城破前,郭靖.黄蓉夫妇请高明 ...

最新文章

  1. (一)检测浏览器是否支持websocket
  2. LeetCode(9.回文数)JAVA
  3. 【2012.4.22】北京植物园卧佛寺
  4. 【Centos 7】【Docker】 安装 redis
  5. mysql全局变量 error_记录——node-mysql连接池遇到的全局变量问题
  6. linux基于域名的虚拟主机,Nginx虚拟主机应用——基于域名、IP、端口的虚拟主机...
  7. 推荐几个2021年在Redis、Go和Rust领域异军突起的技术公众号
  8. java验证码技术_java验证码前台技术
  9. CSRF漏洞原理/防御
  10. 压力测试和负载测试的区别/性能指标/专项测试/(tps/qps)
  11. oldboy第十三天学习
  12. 织梦采集插件,无需采集规则,补损值
  13. Ubuntu20软件商店无法正确加载,解决办法
  14. 大学英语四六级13年12月大改革应对办法全套复习规划
  15. Python for循环倒序遍历列表
  16. python绘制四叶草_python绘图四叶草
  17. 购买重疾险是不是都要先去体检?千万不要!
  18. VS1005 HiRes 高清录音开发板(带显示屏)
  19. 小程序常用单位解释大全
  20. 大华股份发布Dahua Think #战略;国微思尔芯发布芯神瞳逻辑矩阵LX2;爱设计获数千万元融资 | 全球TMT...

热门文章

  1. win7系统不兼容地下城与勇士怎么办?
  2. android层叠式卡片横向轮播,小程序实现层叠卡片滑动效果
  3. 在展示用户信息时,为保护用户隐私,部分数据需要进行部分隐藏(又叫数据脱敏)
  4. bootstrap网格_Bootstrap网格:掌握最有用的Flexbox属性
  5. 线条边框简笔画图片大全_每天学一幅简笔画教师节简笔画图片大全
  6. HoloLens开发之远程视频AR标注功能开发
  7. 记录一次联通cdn劫持的请求响应报文
  8. 怎么把字母缩小当符号_word中如何输入对勾等特殊符号,盘点3类特殊符号的输入方法...
  9. 合并多个txt文本文件的内容
  10. 交警在认定责任时能调取监控吗