注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

ProgressBar和ProgressDialog(一)  

2010-05-19 13:24:34|  分类: Android基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
一、前言
其实ProgressBarProgressDialog,自己实现的话,可能反而要简单些。但是google为满足多种需求,反而把他们搞复杂,。更糟糕的是,google并没有能很好的实现这些需求。我在对他们的学习也花了不少时间,个人觉得这是不值得的。
二、ProgressBar简介
android.widget.ProgressBar用于表示一些操作正在进行,以便用户耐心的等待。
   ProgressBar通常用以一个长方形的主进度条显示操作的进度,如图1。但是它可以在主进度条的基础上再显示一个长方形的次进度条。比如我们在线播放视频的时候,就可以用主进度条来指示当前播放的进度,用次进度条来显示缓存的进度,如图2。要显示长方形的主进度的话,progressBar的styles就必须为Widget.ProgressBar.Horizontal
对于stylesWidget.ProgressBar.HorizontalprogressBar,可把它的android:indeterminate设置为true这时只能有主进度条,虽然进度条还是长方形,但是它只是循环的播放动画,它只是表示操作在进行,而无法表示进度进展到什么程度,如图3.
   虽然google文档说The indeterminate progress bar can be either a spinning wheel or a horizontal bar.
但是如果progressBarstyles不为Widget.ProgressBar.Horizontal的话,它就不是长方形Bar,它也只能为indeterminate形式,即也只能表示操作在进行,而无法表示进度进展到什么程度,如图4
图1
ProgressBar和ProgressDialog - hubingforever - 民主与科学
图2
ProgressBar和ProgressDialog - hubingforever - 民主与科学
  
图3 
indeterminate 模式
ProgressBar和ProgressDialog - hubingforever - 民主与科学
 图4
ProgressBar和ProgressDialog - hubingforever - 民主与科学
 
以下是一个如何在工作线程中通知UI线程更新ProgressBar显示进度的示例
public class MyActivity extends Activity {
     
private static final int PROGRESS = 0x1;

     
private ProgressBar mProgress;
     
private int mProgressStatus = 0;

     
private Handler mHandler = new Handler();

     
protected void onCreate(Bundle icicle) {
         
super.onCreate(icicle);

         setContentView
(R.layout.progressbar_activity);

         mProgress
= (ProgressBar) findViewById(R.id.progress_bar);

         
// Start lengthy operation in a background thread
         
new Thread(new Runnable() {
             
public void run() {
                 
while (mProgressStatus < 100) {
                     mProgressStatus
= doWork();

                     
// Update the progress bar
                     mHandler
.post(new Runnable() {
                         
public void run() {
                             mProgress
.setProgress(mProgressStatus);
                         
}
                     
});
                 
}
             
}
         
}).start();
     
}
 
}
你需要在progressbar_activity.xml布局文件中添加 <ProgressBar> 。默认的ProgressBar显示的是spinning wheel,如图4.为了显示长方形的进度条,你需要把progressBar的styles设置Widget.ProgressBar.Horizontal,示例如下
 <ProgressBar
     
style="@android:style/Widget.ProgressBar.Horizontal"
     ...
/>
如果你想显示具体的进度,你必须使用Widget.ProgressBar.Horizontal 风格,你可以使用ProgressBarincrementProgressBy()setProgress()来更新进度的显示。ProgressBar默认的进度的最大是100,你可以通过
android:max属性或setMax(int max)函数来设置,可以通过getMax()函数来取得它。
ProgressBar通常使用的另外一种风格是Widget.ProgressBar.Small,它显示一个spinning wheel,它通常用在耗时不太长的loading的,如图4.以下是一个loading时的简单示例
 <LinearLayout
     
android:orientation="horizontal"
     ...
>
     
<ProgressBar
         
android:layout_width="wrap_content"
         
android:layout_height="wrap_content"
         
style="@android:style/Widget.ProgressBar.Small"
         
android:layout_marginRight="5dp" />
     
<TextView
         
android:layout_width="wrap_content"
         
android:layout_height="wrap_content"
         
android:text="@string/loading" />
 
</LinearLayout>
另外,系统还提供了其他的以下风格。
现在定义了的所有风格如下:
The "inverse" styles provide an inverse color scheme for the spinner, which may be necessary if your application uses a light colored theme (a white background).

  评论这张
 
阅读(1096)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017