最近项目要求下载进度提示对话框 要有单位 KB,通过查看源码 发现android框架是提供了 这样的方法的 setProgressNumberFormat()但是这个方法 貌似对版本无效比如2.3 具体代码如下
- downloadDialog = new ProgressDialog(ctx);
- // downloadDialog.setIcon(R.drawable.ic_launcher);
- downloadDialog.setTitle("下载中请等待");
- downloadDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
- downloadDialog.setCanceledOnTouchOutside(false);
- downloadDialog.setProgressNumberFormat("%1d kb/%2d kb");
- /* downloadDialog.setButton("确定", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- //这里添加点击后的逻辑
- }
- });*/
- downloadDialog.setButton2("取消", new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int whichButton) {
- errorMsg = "下载已经取消...";
- sendMessage(DOWNLOAD_ERROR);
- }
- });
其中 downloadDialog.setProgressNumberFormat("%1d kb/%2d kb"); 参数 %1d kb/%2d kb的意思就是 进度填入 %1d位置 总数填入%2d 这样可以传入任意形式的格式化字符串只要有%1d和%2d 就OK。
效果图
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
自定义显示格式:
progressDialog.setProgressNumberFormat("%1d kb/%2d kb");
当前进度填入%1d位置,总数填入%2d。
这个方法是自动填充的,只要在初始化时,加上这一句,
调用progressDialog.setMax(int )后会自动将总数填入%2d.
同理,调用progressDialog.setProgress(int )后会自动将当前进度填入%1d.
但是,从setMax,setProgress的输入参数可知这2个方法只接收整数。
如果进度显示的样式只要求为整数形式,那么在初始化时,定义一次
progressDialog.setProgressNumberFormat("%1d kb/%2d kb"); 就可以了。
那要如何显示小数呢? 很简单,既然setProgressNumberFormat()能显示自定义的"/","kb",
这些字符,那么就能显示我们需要的自定义字符串。所以,干脆就让这个方法不接收前面
说的当前进度%1d,和总数%2d,而是直接显示我们需要的处理好的字符串即可:
(文件大小fileLength,已下载大小downLength)
初始化时: progressDialog.setMax(fileLength);
每一次刷新下载进度时:
progressDialog.setProgress(downLength);
float all = fileLength/1024/1024;
float percent = downLength/1024/1024;
progressDialog.setProgressNumberFormat(String.format("%.2fM/%.2fM", percent, all));
注意:setProgressNumberFormat这个方法要求版本最小为 android:minSdkVersion="11"