在某項延續性工作的進展過程中為了不讓使用者覺得程式失去響應,需要有個活動的進度條,表示此過程正在進行中,進而更友好的提高了使用者的界面的友好性。
在某些操作的進度中的可視訓示器,為使用者呈現操作的進度,還它有一個次要的進度條,用來顯示中間進度,如在流媒體播放的緩沖區的進度。一個進度條也可不确定其進度。在不确定模式下,進度條顯示循環動畫。這種模式常用于應用程式使用任務的長度是未知的。
XML重要屬性與ProgressBar方法
@android:style/Widget.ProgressBar.Horizontal:水準進度條
@android:style/Widget.ProgressBar.Inverse:普通大小的進度的環形條
@android:style/Widget.ProgressBar.Large
@android:style/Widget.ProgressBar.Small
android:max:設定該進度條的最大值
android:progress:設定該進度條的已完成進度
android:progressDrawable:設定該進度條的軌道對應的Drawabled對象
android:indeterminate():訓示進度條是否在不确定模式下,值為true
android:indeterminateDrawable:設定繪制不顯示進度的進度條的Drawable對象
android:indeterminateDuration:設定不精确顯示進度的持續時間
樣式:
XML布局檔案:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<!-- 定義一個大環形進度條 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>
<!-- 定義一個普通大小的進度條 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<!-- 定義一個小環形進度條 -->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"/>
<ProgressBar
android:id="@+id/bar1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:max="100"
style="@android:style/Widget.ProgressBar.Horizontal"/>
<ProgressBar
android:id="@+id/bar2"
android:max="100"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:progressDrawable="@drawable/my_bar"
style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>
Drawable對象的布局檔案:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 定義軌道的背景 -->
<item android:id="@android:id/background"
android:drawable="@drawable/no"/>
<!-- 定義軌道上已經完成部分的樣式 -->
<item android:id="@android:id/progress"
android:drawable="@drawable/ok"/>
</layer-list>
主程式:
package com.example.progressbardemo;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
final static int count = 100;
int loc = 0;//記錄目前完成進度
ProgressBar bar1,bar2;
Handler myhHandler = new Handler(){
@Override
public void handleMessage(Message msg){
if(msg.what == 101){
bar1.setProgress(loc);
bar2.setProgress(loc);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bar1 = (ProgressBar) findViewById(R.id.bar1);
bar2 = (ProgressBar) findViewById(R.id.bar2);
new Thread(){
public void run(){
while(loc<count){
int l = loc;
loc = work(l);
myhHandler.sendEmptyMessage(101);
}
}
}.start();
}
/**
* 建立一個耗時的操作
* */
public int work(int l){
l++;
try {
Thread.sleep(100);
} catch (Exception e) {
// TODO: handle exception
}
return l;
}
}