IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android初级基础知识复习(十七) —— 自定义通知栏 -> 正文阅读

[移动开发]Android初级基础知识复习(十七) —— 自定义通知栏

通知推送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的属性设置。
修改完毕,这下不管系统通知栏默认的是黑底白字,还是默认白底黑字,自定义消息的标题文本都能 自动变色啦。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 13:42:51  更:2021-08-09 13:42:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 22:39:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码