Android初级基础知识复习(十八) —— 自定义通知栏
通知推送Notification
在手机屏幕的顶端下拉会弹出通知栏,里面存放的是App即时提醒用户的消息,消息内容由Notification 产生并推送。每条消息通知基本都有图标、标题、内容、时间等元素,参数通过Notification.Builder构建。 下面来看常用的参数构建方法。
使用以上设置方法要注意4点:
(1)setSmallIcon方法必须调用,否则不会显示通知消息。
(2)setWhen与setUsesChronometer同时只能调用其中一个,即推送时间与计数器无法同时显示,因为 它们都位于通知栏右边。
(3)setSubText与setProgress同时只能调用其中一个,因为附加说明与进度条都位于标题文本下方。
(4)setNumber与setContentInfo同时只能调用其中一个,因为计数值与提示都位于通知栏右下方。
使用Notification只能生成通知内容,实际推送动作还需借助系统的通知服务实现。NotificationManager 是系统通知服务的管理类,有以下3个常用方法。
notify:推送指定消息到通知栏。
cancel:取消指定消息。调用该方法后,通知栏中的指定消息将消失。
cancelAll:取消所有消息。
进度条ProgressBar
消息通知Notification的setProgress方法是对内置进度条进行操作,不过很多时候进度条会单独使用,有必要了解一下ProgressBar的具体用法。
下面来看进度条的常用属性。
进度条的常用方法有以下9个。
使用进度条时需要注意以下两点:
(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。
自定义通知的文本颜色设定
开发者根本无法辨别哪些手机改了通知栏的背景,甚至都无从获知背景色是什么,也就没法在代码里面判断并处理。幸好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初级基础知识复习(十八) —— 自定义通知栏的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 计算机二级考试干货内容,计算机二级考试经
- 下一篇: Android开发app实现发送短信功能