ProgressBar和ProgressDialog(一)

一、前言
其实 ProgressBar ProgressDialog ,自己实现的话,可能反而要简单些。但是google为满足多种需求,反而把他们搞复杂,。更糟糕的是,google并没有能很好的实现这些需求。我在对他们的学习也花了不少时间,个人觉得这是不值得的。
二、ProgressBar简介
android.widget.ProgressBar用于表示一些操作正在进行,以便用户耐心的等待。
    ProgressBar 通常用以一个长方形的主进度条显示操作的进度,如 图1 。但是它可以在主进度条的基础上再显示一个长方形的次进度条。比如我们在线播放视频的时候,就可以用主进度条来指示当前播放的进度,用次进度条来显示缓存的进度,如 图2 。要显示 长方形的主进度的话, p rogressBar的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 .
但是如果 progressBar styles 不为 Widget.ProgressBar.Horizontal 的话,它就不是长方形Bar,它也只能为 indeterminate 形式,即也只能表示操作在进行,而无法表示进度进展到什么程度,如 图4
图1

图2

  
图3 
indeterminate 模式

 图4

 
以下是一个如何在工作线程中通知 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 风格,你可以使用 ProgressBar incrementProgressBy()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).


评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值