Android官方开发文档Training系列课程中文版:通知用户之在通知中显示进度-阿里云开发者社区

开发者社区> sahadev> 正文

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

简介: 原文地址:http://android.xsoftlab.net/training/notify-user/display-progress.html#FixedProgress 通知中包含了一个进度指示器,用来向用户展示一项正在进行中的工作状态。
+关注继续查看

原文地址: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() {
        @Override
        public void run() {
            int incr;
            // Do the "lengthy" operation 20 times
            for (incr = 0; incr <= 100; incr+=5) {
                    // Sets the progress indicator to a max value, the
                    // current completion percentage, and "determinate"
                    // state
                    mBuilder.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 time
                        try {
                            // Sleep for 5 seconds
                            Thread.sleep(5*1000);
                        } catch (InterruptedException e) {
                            Log.d(TAG, "sleep failure");
                        }
            }
            // When the loop is finished, updates the notification
            mBuilder.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系列课程中文版:OpenGL绘图之应用投影与相机视图
原文地址:http://android.xsoftlab.net/training/graphics/opengl/projection.html##transform 在OpenGL ES环境中,投影相机View可以将所绘制的图形模拟成现实中所看到的物理性状。
1016 0
Android官方开发文档Training系列课程中文版:动画视图之应用场景
原文链接:http://android.xsoftlab.net/training/transitions/transitions.html 在转场框架中,动画是由一帧帧的图像连续绘制形成的,这一帧帧的图像描述了启动场景到结束场景的整个过程。
834 0
Android官方开发文档Training系列课程中文版:OpenGL绘图之图形定义
原文地址:http://android.xsoftlab.net/training/graphics/opengl/shapes.html 使用OpenGL绘制图形的第一步就是要定义一个图形。
711 0
Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能
原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/index.html 引言 Android设备除了可以与服务器建立连接之外,Android无线API还允许处于同一网段下的两台设备建立连接,或者是物理距离相近的两台设备建立连接。
825 0
Android官方开发文档Training系列课程中文版:网络操作之网络连接
原文地址:http://android.xsoftlab.net/training/basics/network-ops/index.html 引言 这节课将会学习最基本的网络连接,监视网络连接状况及网络控制等内容。
681 0
Android官方开发文档Training系列课程中文版:通知用户之构建通知
原文地址:http://android.xsoftlab.net/training/notify-user/index.html 引言 通知用于在有事件发生时,将事情以更便捷的方式展示给用户。
671 0
Android官方开发文档Training系列课程中文版:网络操作之网络管理
原文地址:http://android.xsoftlab.net/training/basics/network-ops/managing.html 这节课将会学习如何对网络资源的使用情况拥有更细粒度的控制力。
597 0
Android官方开发文档Training系列课程中文版:通知用户之更新或移除通知
原文地址:http://android.xsoftlab.net/training/notify-user/managing.html#Removing 当需要在不同时段发布同一事件类型的通知时,应当避免创建新的通知。
638 0
Android官方开发文档Training系列课程中文版:网络操作之XML解析
原文地址:http://android.xsoftlab.net/training/basics/network-ops/xml.html 扩展标记语言(XML)是一系列有序编码的文档。
556 0
+关注
sahadev
移动开发方向专家
183
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载