android學習筆記26:水平進度條
阿新 • • 發佈:2019-01-23
通過進度條可以讓使用者知道程式的執行進度,同時也是一種互動手段,可以使使用者覺得等待的時間並不是那麼的長。使用進度條時,可以使用系統預設的樣式,也可以通過XML檔案自己指定樣式。
自定義的滾動條樣式
<?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>
佈局檔案
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="任務完成的進度" /> <!-- 定義一個水平進度條 --> <ProgressBar android:id="@+id/bar" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="100" /> <!-- 定義一個水平進度條,並改變軌道外觀 --> <ProgressBar android:id="@+id/bar2" style="@android:style/Widget.ProgressBar.Horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:max="100" android:progressDrawable="@drawable/my_bar" /> <Button android:id="@+id/Button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/start" /> </LinearLayout>
點選啟動按鈕之後,啟動一個新的執行緒來執行任務,再通過一個Handler來接收訊息和更新滾動條
public class ProgressBarTest extends Activity { //該程式模擬填充長度為100的陣列 private int[] data = new int[100]; int hasData = 0; //記錄ProgressBar的完成進度 int status = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); final ProgressBar bar = (ProgressBar) findViewById(R.id.bar); final ProgressBar bar2 = (ProgressBar) findViewById(R.id.bar2); //建立一個負責更新的進度的Handler final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { //表明訊息是由該程式傳送的。 if (msg.what == 0x111) { bar.setProgress(status); bar2.setProgress(status); } } }; final Button startButton = (Button)findViewById(R.id.Button); startButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub hasData = 0; status = 0; //啟動執行緒來執行任務 new Thread() { public void run() { while (status < 100) { // 獲取耗時操作的完成百分比 status = doWork(); // 傳送訊息到Handler Message m = new Message(); m.what = 0x111; // 傳送訊息 mHandler.sendMessage(m); } } }.start(); } }); } //模擬一個耗時的操作。 public int doWork() { //為陣列元素賦值 data[hasData++] = (int)(Math.random() * 100); try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } return hasData; } }