原文地址:http://android.xsoftlab.net/training/notify-user/display-progress.html#FixedProgress

通知中包含了一个进度指示器,用来向用户展示一项正在进行中的工作状态。如果你可以确保任务会花费多长时间,并且可以在任何时候得知它完成了多少工作,那么就可以使用确定样式的指示器(一个进度条)。如果不能确定任务需要花费的时间,可以使用不确定样式的指示器(一个活动的指示器)。

进度指示器由ProgressBar类实现。

使用进度指示器,可以调用setProgress()方法。确定样式与不确定样式会在下面的章节中讨论。

显示确定进度指示器

为了显示确定进度指示器,需要调用setProgress(max, progress, false)方法将指示器添加到通知上,然后再将该通知发布出去。该方法的第三个参数用于指示该进度条是确定性进度条(true)还是不确定性进度条(false)。随着操作的处理,进度progress会增长,这时需要更新通知。在操作结束时,progress应该等于max。一种常规的方式是将max设置为100,然后将progress以百分比的形式自增。

你也可以选择在任务完成的时候将进度条取消显示或者移除通知。在前一种情况中,要记得更新通知的文本,告诉用户任务已完成。后一种情况中,调用setProgress(0, 0, false)就可以完成通知的移除。

int id = 1;
...
mNotifyManager =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mBuilder = new NotificationCompat.Builder(this);
mBuilder.setContentTitle("Picture Download").setContentText("Download in progress").setSmallIcon(R.drawable.ic_notification);
// Start a lengthy operation in a background thread
new Thread(new Runnable() {@Overridepublic void run() {int incr;// Do the "lengthy" operation 20 timesfor (incr = 0; incr <= 100; incr+=5) {// Sets the progress indicator to a max value, the// current completion percentage, and "determinate"// statemBuilder.setProgress(100, incr, false);// Displays the progress bar for the first time.mNotifyManager.notify(id, mBuilder.build());// Sleeps the thread, simulating an operation// that takes timetry {// Sleep for 5 secondsThread.sleep(5*1000);} catch (InterruptedException e) {Log.d(TAG, "sleep failure");}}// When the loop is finished, updates the notificationmBuilder.setContentText("Download complete")// Removes the progress bar.setProgress(0,0,false);mNotifyManager.notify(id, mBuilder.build());}}
// Starts the thread by calling the run() method in its Runnable
).start();

最终的效果如下图所示:

左边的图显示了正在进行中的通知,而右边的图显示了任务完成后的通知。

显示持续活动的指示器

为了显示不确定性的指示器,需要调用setProgress(0, 0, true)方法将进度条显示在通知中,然后将该通知发布。第一第二个参数将会被忽略,第三个参数决定了该进度条是否是不确定性进度条。最终的显示效果为与常规进度条有相同的显示风格,除了它一直在动之外。

在操作开始之前请发布该通知,进度动画会一直持续运行,直到你修改了通知。当操作完成后,调用setProgress(0, 0, false)方法然后更新通知以便移除活动指示器。否则的话,就算是任务完成后,该动画也不会停止。所以要记得在任务完成后更改通知文本,以便告知用户操作已完成。

// Sets the progress indicator to a max value, the current completion
// percentage, and "determinate" state
mBuilder.setProgress(100, incr, false);
// Issues the notification
mNotifyManager.notify(id, mBuilder.build());

找到前面的代码,将下面部分替换。要记得setProgress()方法的第三个参数为true:

 // Sets an activity indicator for an operation of indeterminate length
mBuilder.setProgress(0, 0, true);
// Issues the notification
mNotifyManager.notify(id, mBuilder.build());

最终的显示效果如下:

Android官方开发文档Training系列课程中文版:通知用户之在通知中显示进度相关推荐

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

  5. Android官方开发文档Training系列课程中文版:添加ActionBar之设置ActionBar

    导言- 添加ActionBar 原文地址:http://android.xsoftlab.net/training/basics/actionbar/index.html ActionBar是很多重要 ...

  6. Android官方开发文档Training系列课程中文版:打印内容之HTML文档打印

    原文地址:http://android.xsoftlab.net/training/printing/html-docs.html 在Android中打印内容要比打印照片要复杂一些,它要求将文本与图像 ...

  7. Android官方开发文档Training系列课程中文版:OpenGL绘图之应用投影与相机视图

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投 ...

  8. Android官方开发文档Training系列课程中文版:通知用户之构建通知

    原文地址:http://android.xsoftlab.net/training/notify-user/index.html 引言 通知用于在有事件发生时,将事情以更便捷的方式展示给用户.用户可以 ...

  9. Android官方开发文档Training系列课程中文版:动画视图之应用场景

    原文链接:http://android.xsoftlab.net/training/transitions/transitions.html 在转场框架中,动画是由一帧帧的图像连续绘制形成的,这一帧帧 ...

  10. Android官方开发文档Training系列课程中文版:高效显示位图之管理位图内存

    原文地址:http://developer.android.com/training/displaying-bitmaps/manage-memory.html 除了在上一节中描述的步骤之外,还有一些 ...

最新文章

  1. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来
  2. ThumbProcess.exe错误的解决方法
  3. python官网下载速度慢-python 官网慢
  4. HyperLink 鼠标经过时候显示全部文字
  5. 51nod 1103 N的倍数 思路:抽屉原理+前缀和
  6. Activity的回调机制---Activity学习笔记(三)
  7. 为Lucene选择快速唯一标识符(UUID)
  8. python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)...
  9. git 子模块在项目中的使用
  10. 探果(简称tamguo)是基于java开发的在线题库系统
  11. android播放html5视频,仅仅有声音没有图像视频
  12. Windows下载最新谷歌浏览器
  13. 苹果录屏没声音_不会真有人MacBook录屏没声音吧?别用了SoundFlower了!
  14. 什么是搜索引擎?搜索引擎有哪些?
  15. FTP与TFTP介绍
  16. 400亿票房跟股市有什么关系
  17. 配置teamviewer远程无显示器ubuntu工控机实操
  18. vba 保存word里面的图片_word表格技巧:如何对表格进行样式批处理
  19. a标签的带参传值和form表单的带参
  20. 读《文明、现代化、价值投资与中国》一点感受

热门文章

  1. 含有5亿个整数的大文件,如果排序?
  2. vscode 使用 ssh 登录
  3. 这不是商业互吹,是学习的宝藏
  4. mini2440驱动分析之LCD
  5. python空列表添加_Python列表的简单操作
  6. mysql访问类型最好的_【干货满满】最全的MySQL性能指南(一):选择最佳的数据类型...
  7. 长亭php反序列化防护_CTF-攻防世界-Web_php_unserialize(PHP反序列化)
  8. 数据结构之并查集:并查集的介绍与Python代码实现——18
  9. Chapter7-5_Multilingual BERT
  10. LeetCode MySQL 1581. 进店却未进行过交易的顾客