通知推送Notification

在手机屏幕的顶端下拉会弹出通知栏,里面存放的是App即时提醒用户的消息,消息内容由Notification 产生并推送。每条消息通知基本都有图标、标题、内容、时间等元素,参数通过Notification.Builder构建。 下面来看常用的参数构建方法。

  1. setWhen:设置推送时间,格式为“小时:分钟”。推送时间在通知栏右方显示。
  2. setShowWhen:设置是否显示推送时间。
  3. setUsesChronometer:设置是否显示计数器。为true时不显示推送时间,动态显示从通知被推送到当前的时间间隔,以“分钟:秒钟”格式显示。
  4. setSmallIcon:设置状态栏里面的图标(小图标)。
  5. setTicker:设置状态栏里面的提示文本。
  6. setLargeIcon:设置通知栏里面的图标(大图标)。
  7. setContentTitle:设置通知栏里面的标题文本。
  8. setContentText:设置通知栏里面的内容文本。
  9. setSubText:设置通知栏里面的附加说明文本,位于内容文本下方。若调用该方法,则setProgress的 设置失效。
  10. setProgress:设置进度条与当前进度。进度条位于标题文本与内容文本中间。
  11. setNumber:设置通知栏右下方的数字,可与setProgress联合使用,表示当前的进度数值。
  12. setContentInfo:设置通知栏右下方的文本。若调用该方法,则setNumber的设置失效。
  13. setContentIntent:设置内容的延迟意图PendingIntent,点击该通知时触发该意图。通常调用 PendingIntent的getActivity方法获得延迟意图对象,
  14. getActivity表示点击后跳转到该页面。
  15. setDeleteIntent:设置删除的延迟意图PendingIntent,滑掉该通知时触发该动作。
  16. setAutoCancel:设置该通知是否自动清除。若为true,则点击该通知后,通知会自动消失;若为 false,则点击该通知后,通知不会消失。
  17. setContent:设置一个定制的通知栏视图RemoteViews,用于取代Builder的默认视图模板。
  18. build:构建方法。在以上参数都设置完毕后,调用该方法返回Notification对象。

使用以上设置方法要注意4点:
(1)setSmallIcon方法必须调用,否则不会显示通知消息。
(2)setWhen与setUsesChronometer同时只能调用其中一个,即推送时间与计数器无法同时显示,因为 它们都位于通知栏右边。
(3)setSubText与setProgress同时只能调用其中一个,因为附加说明与进度条都位于标题文本下方。
(4)setNumber与setContentInfo同时只能调用其中一个,因为计数值与提示都位于通知栏右下方。

使用Notification只能生成通知内容,实际推送动作还需借助系统的通知服务实现。NotificationManager 是系统通知服务的管理类,有以下3个常用方法。
notify:推送指定消息到通知栏。
cancel:取消指定消息。调用该方法后,通知栏中的指定消息将消失。
cancelAll:取消所有消息。

进度条ProgressBar

消息通知Notification的setProgress方法是对内置进度条进行操作,不过很多时候进度条会单独使用,有必要了解一下ProgressBar的具体用法。
下面来看进度条的常用属性。

  1. style:指定进度条的形状样式。?android:attr/progressBarStyleHorizontal表示水平形状,? android:attr/progressBarStyle表示圆圈形状。
  2. max:指定进度条的最大值。 progress:指定进度条当前进度值。
  3. secondaryProgress:指定进度条当前次要进度值。比如播放视频,progress用来表示当前播放进度, secondaryProgress用来表示当前缓冲进度。
  4. progressDrawable:指定进度条的进度图形。

进度条的常用方法有以下9个。

  1. setProgress:设置当前进度。
  2. getProgress:获取当前进度。
  3. setSecondaryProgress:设置次要进度。
  4. getSecondaryProgress:获取次要进度。
  5. setMax:设置进度条的最大值。
  6. getMax:获取进度条的最大值。
  7. incrementProgressBy:设置当前进度的增量。
  8. incrementSecondaryProgressBy:设置次要进度的增量。
  9. setProgressDrawable:设置进度条的进度图形。

使用进度条时需要注意以下两点:
(1)max、progress的相关属性和方法只在样式为progressBarStyleHorizontal时才有效,即水平进度条可 动态设置进度值;如果样式为progressBarStyle圆圈形状,最大值与进度值的设置就会失效,即圆圈形状不 会显示当前进度,只会兀自旋转。想实现动态显示进度的进度条,可参考6.2节的圆弧进度动画。
(2)progressDrawable进度图形不能用普通图形,只能用层次图形LayerDrawable。层次图形可在XML 文件中定义,如果用于描述进度图形就要同时定义两个层次,即背景层次与进度条层次。例如,在自定义 圆弧动画时运用了背景视图与前景视图,在进度条中就存在背景层次,只不过前景视图换成了进度条层 次。
  下面是一个层次图形定义的XML例子。其中,根节点layer-list表示这是一个层次列表,即层次图形定 义;背景层次的id为@android:id/background,采用的是形状图形(节点名称为shape);进度条层次的id为 @android:id/progress,采用的是裁剪图形ClipDrawable(节点名称为clip):

远程视图RemoteViews

前面介绍Notification的常用方法时提到setContent方法可以在设置定制的通知栏视图RemoteViews时取代Builder的默认视图模板。
虽然RemoteViews与Activity一样有自己的布局文件,但是RemoteViews的使用 权限小了很多。两者的区别主要有:
(1)RemoteViews主要用于通知栏部件和桌面部件,而Activity用于页面。
(2)RemoteViews只支持少数几种控件,如TextView、ImageView、Button、ImageButton、 ProgressBar、Chronometer(计时器)和AnalogClock(模拟时钟)。
(3)RemoteViews不可直接获取和设置控件信息,只能通过该对象的set方法修改控件信息。
下面来看远程视图的常用方法。
构造函数:创建一个RemoteViews对象。第一个参数是包名,第二个参数是布局文件id。

  1. setViewVisibility:设置指定控件是否可见。
  2. setViewPadding:设置指定控件的间距。
  3. setTextViewText:设置指定TextView或Button控件的文字内容。
  4. setTextViewTextSize:设置指定TextView或Button控件的文字大小。
  5. setTextColor:设置指定TextView或Button控件的文字颜色。
  6. setTextViewCompoundDrawables:设置指定TextView或Button控件的文字周围图标。
  7. setImageViewResource:设置ImageView或ImgaeButton控件的资源编号。
  8. setImageViewBitmap:设置ImageView或ImgaeButton控件的位图对象。
  9. setChronometer:设置计时器信息。
  10. setProgressBar:设置进度条信息,包括最大值与当前进度。
  11. setOnClickPendingIntent:设置指定控件的点击响应动作。

自定义通知的文本颜色设定

开发者根本无法辨别哪些手机改了通知栏的背景,甚至都无从获知背景色是什么,也就没法在代码里面判断并处理。幸好Android在系统的资源文件中配置了统一风格,像通知栏标题颜色,其实 是从系统资源文件获取对应的色值。对Android4.*系统来说,通知栏的标题色取自系统的“? android:attr/textColorPrimary”;对于Android5.0及以上的系统,通知标题的文字风格android:textAppearance取自系统的“@android:style/TextAppearance.Material.Notification.Title”。这样一来,在自定义通知的时候,开发者可以将标题文字颜色设置为系统默认的标题色。于是系统通知拥有什么文本颜色(可能是黑底白字也可 能是白底黑字),开发者自定义的通知也是什么文本颜色,从而一劳永逸解决了通知栏的标题颜色与背景 颜色的适配问题。

具体到App开发的适配工作上面,则需进行以下操作步骤:
(1)首先打开res\values目录下面的styles.xml,在resources节点内部添加如下所示的风格配置,表示定义一个采取系统默认标题色的字体风格:

(2)其次在res目录下新建一个文件夹values-v21,再在该文件夹下新建一个styles.xml,并往该XML文件填入下列的风格配置代码:

新文件夹values-v21用于适配版本代码不低于21的Android系统,即Android5.0及更高版本的系统。倘若 当前手机运行的是Android4.*,则App运行的时候,系统会自动到values目录下寻找相应的资源配置;倘若当前手机运行的是Android5.0或者更高版本,则系统会优先在values-v21目录下查找资源,有找到就用这里的资源,没找到再用values目录下的资源。
(3)最后回到自定义通知对应的布局文件,找到标题文本控件,去掉对文字颜色android:textColor的属 性设置,再添加一行对控件风格style的属性设置。
修改完毕,这下不管系统通知栏默认的是黑底白字,还是默认白底黑字,自定义消息的标题文本都能 自动变色啦。

Android初级基础知识复习(十八) —— 自定义通知栏相关推荐

  1. Simulink 环境基础知识(十八)--确定信号维度

    目录 确定信号维度 支持多维信号的 Simulink 模块 确定源模块的输出维度 确定非源模块的输出维度 信号和参数维度规则 输入信号和参数的标量扩展 确定信号维度 Simulink® 模块可以输出一 ...

  2. linux基础知识复习

    @(tigerfive)[linux,基础知识,复习笔记] linux基础复习(一) 今天只整理框架,具体内容之后详细整理吧 文件管理 文件基本操作 创建文件和目录 拷贝文件和目录 剪切文件和目录 删 ...

  3. (转载)Android项目实战(二十八):使用Zxing实现二维码及优化实例

    Android项目实战(二十八):使用Zxing实现二维码及优化实例 作者:听着music睡 字体:[增加 减小] 类型:转载 时间:2016-11-21 我要评论 这篇文章主要介绍了Android项 ...

  4. Java基础知识复习(一)

    Java基础知识复习(一) 目录 Java简介 命名规则 八种基本的数据类型 字面量 类型转换 变量的形态 逻辑运算符 位运算 移位运算 习题知识点 目录 Java简介 Java是由Sun公司在199 ...

  5. Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程)...

    Android项目实战(三十八):2017最新 将AndroidLibrary提交到JCenter仓库(图文教程) 原文:Android项目实战(三十八):2017最新 将AndroidLibrary ...

  6. java基础知识复习(上半)

    java基础知识复习 java为什么被发明? Green项目的确立,应用于像电视盒一样的消费类电子产品,语言本身本身中立. java的三大版本? javaSE的定位在于客户端,只要用于桌面应用软件的编 ...

  7. android培训总结范文,android培训基础知识总结

    android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...

  8. 什么是人们常用的计算机设备之一,计算机:复习二基础知识复习

    <计算机:复习二基础知识复习>由会员分享,可在线阅读,更多相关<计算机:复习二基础知识复习(15页珍藏版)>请在人人文库网上搜索. 1.基础知识复习2,计算机系统,一.知识框图 ...

  9. 2021 版 Spring Boot 基础知识复习手册(2w字,建议收藏)

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:分享一套基于SpringBoot和Vue的企业级中后台开源项目,这个项目有点哇塞!个人原创100W +访问量博客: ...

最新文章

  1. 人脸识别的十大过程介绍
  2. 中标麒麟mysql导数据_中标麒麟(linux)mysql配置记录
  3. Vue实现仿音乐播放器14-实现搜索页面以及功能
  4. 6工程文件夹作用_data_dragon数据工程小工具收集
  5. oracle 测试库搭建,Oracle Study之--通过RMAN克隆测试库
  6. 机器学习第20篇 - 基于Boruta选择的特征变量构建随机森林
  7. ESP32超详细学习记录:获取B站粉丝数
  8. OpenEmbedded 中文手册
  9. 6410 UBOOT 支持SD/SDHC卡启动 FAT32文件系统 yaffs2烧录 图片显示烧录状态
  10. 计算机主机关不了,电脑无法关机怎么办_电脑正常关机关不了如何解决
  11. 使用cpolar内网穿透搭建远程监控
  12. 他是第一个因人脸识别错误被关监狱的人,证据仅仅是1张驾照照片
  13. pdf转化为图片显示知多少
  14. 第二届童装品牌团2015年春夏联展
  15. python的运算符(上)
  16. websocket 发送数据大于0xFFFF(65535)的处理
  17. Kubernetes 部署高可用集群(二进制,v1.18)下
  18. python使用python-docx自动化操作word
  19. Scrapy爬虫框架视频学习
  20. html做成绩查询,一个简单的成绩查询系统

热门文章

  1. mplayer-2.3节:视频输出设备 .
  2. matlab儒略日转日期,将日期(年、月、日)转换为儒略日编号并返回日期
  3. 像哆啦A梦懂大雄一样懂客户,我们也会拥有百宝箱
  4. 家用食材净化器什么牌子好,家用食材净化器科普
  5. 计算机每次关机需要配置,电脑一键关机怎么设置 电脑关机一步到位设置教程...
  6. 手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16(附python源代码及数据库)——改变世界经典人工智能项目实战(一)手把手教学迁移学习
  7. Codeforces Round #499 (Div. 2) 1011 C. Fly 二分
  8. 用户需求不等于产品需求
  9. CANopen协议中文文档
  10. 知乎上演的“变形计“,资本市场会打几分?