最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】给Android程序添加进度条(ProgressBar)

Android crifan 5262浏览 0评论

【问题】

对于Android程序

Songtaste歌曲下载器

来说,已经实现了基本的下载功能了:

【已解决】Android中利用HttpClient等库实现网络文件下载

并且已经实现了hook函数,用于及时获得对应的下载进度:

【已解决】Android(Java)中如何实现函数回调(类似于传递函数指针)

现在接着去实现,添加对应的进度条,及时显示下载的进度。


1.看到了,本身的Graphical Layout中,就有对应的进度条:

layout has widget

所以手动拖动一个进去。

2.发现默认是Normal的,所以又去掉,换成对应的Horizontal的:

horizontal one

3.然后就是想办法,如何和代码关联起来了。

参考:

【详解】Android ProgressBar ProgressDialog 进度条 进度条对话框

去添加配置:

 	<TableRow
 	    android:layout_width="fill_parent"
 	    android:layout_height="fill_parent"
 	    android:gravity="center" >

 	    <ProgressBar
 	        android:id="@+id/pgbDownload"
 	        style="?android:attr/progressBarStyleHorizontal"
 	        android:layout_width="wrap_content"
 	        android:layout_height="wrap_content" 
 	        android:max="100"
 	        android:progress="0"
 	        android:layout_gravity="center_vertical"
 	        />

 	</TableRow>

以及添加代码:

					int percent = (int)((currentSize * 100) / totalSize);
					pgbDownload = (ProgressBar) findViewById(R.id.pgbDownload);
					pgbDownload.setProgress(percent);

结果发现没效果,虽然设置了值了,但是没显示。

4.还是去看官网解释:

http://developer.android.com/intl/zh-CN/reference/android/widget/ProgressBar.html

结果官网中代码,貌似也是直接设置setProgress就可以了的。

后来参考:

Android progress bar example

才注意到,自己上述的findViewById,是放在每次调用的地方了。

应该放到初始化才对。。。

5.但是,结果还是无法实现即时更新,虽然调试都确保了,的确是每次进度更新,会调用到setProgress的。

关于进度条不更新,而只能在最后突然更新到100%的问题,详见:

【已解决】Android中的进度条,虽然设置了setProgress但是也不更新,直到最后完成时,突然更新为100%

6.后来又折腾:

【已解决】Android中在新线程中调用Toast.makeText导致程序崩溃

最后终于可以正常,添加了进度条,可以正常更新:

downloading

更新完毕最后,可以提示下载完毕:

download complete

 

【总结】

总的来说,Android下面的开发,还是比较麻烦的。很多常见的控件,都不能完整的封装,都还是需要另外注意很多事情,才能正常工作的。

至少对于VS2010中的C#开发,还是麻烦多了。

转载请注明:在路上 » 【已解决】给Android程序添加进度条(ProgressBar)

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
83 queries in 0.183 seconds, using 22.08MB memory