ProgressDialog中的进度单位

9
Android的ProgressDialog允许您将当前进度和最大值设置为整数。这些值在对话框中显示如下:

3401/10023

其中第一个数字是当前进度,第二个数字是最大值。
我希望还可以显示测量单位。类似于以下内容:

3401/10023 KB

使用ProgressDialog是否可行?如果不行,您建议我们如何向用户提供此信息?我正在尝试避免重新实现ProgressDialog以包括单位。

为什么不用百分比来表示呢?比如30/100。 - fedj
进度对话框已经显示了百分比。但是在文件下载进度对话框中,如果是一个大文件,我认为以字节的形式显示进度对用户更友好。 - hpique
如果您查看ProgressDialog源代码,文本是由在onCreate方法中创建的处理程序处理的。请参见我的下一个答案。 - fedj
4个回答

6
更新:`setProgressNumberFormat` 已经是 API 的一部分,自 level 11 起可用。
`ProgressDialog` 源代码的 HEAD 已经包含了一个公共函数 `setProgressNumberFormat`,可以用来设置单位。不幸的是,在最新的 Android 版本中似乎没有这个函数。我猜它将在未来的更新中包含。
与此同时,复制这个 `ProgressDialog` 实现是最好的选择。子类化 `ProgressDialog` 是无用的,因为它的所有成员都是私有的,并且使用 `view.findViewById(R.id.progress_number)` 直接获取 `TextView` 是极其危险的,因为没有任何保证 id 总是相同的(或者 `TextView` 总是存在)。

是的,但至少需要2.3版本才能使用setProgressNumberFormat方法。 findViewById根本不被推荐使用,因为没有任何东西可以告诉你任何实际或未来版本是否具有相同的ID。 - fedj
同意。实际上,我提到了这些可能性是为了阻止它们的使用,但我会让它更清晰明了。 - hpique

5
在ProgressDialog的源文件中:
mViewUpdateHandler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);

                /* Update the number and percent */
                int progress = mProgress.getProgress();
                int max = mProgress.getMax();
                double percent = (double) progress / (double) max;
                mProgressNumber.setText(progress + "/" + max);
                mProgressPercent.setText(mProgressPercentFormat.format(percent));
            }
        };

你必须重新实现它,无法避免


5
从API 11开始,您可以调用以下函数来实现您的目的。
mProgressDialog.setProgressNumberFormat("%1d/%2d kB") 

3

对我来说,一开始并不明显,我可以直接设置:

mProgressDialog.setMessage("Downloading...(size in kB)");

也许这种最简单的方法对其他人来说并不明显...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接