android 各種進度條(ProgressBar)

來源:互聯網
上載者:User

當一個應用在後台執行時,前台介面就不會有什麼資訊,這時使用者根本不知道程式是否在執行、執行進度如何、應用程式是否遇到錯誤終止等,這時需要使用進度條來提示使用者背景程式執行的進度。Android系統提供了兩大類進度條樣式,長形進度條(progress-BarStyleHorizontal) 
和圓形進度條(progressBarStyleLarge)。進度條用處很多,比如,應用程式裝載資源和網路連接時,可以提示使用者稍等,這一類進度條只是代表應用程式中某一部分的執行情況,而整個應用程式執行情況呢,則可以通過應用程式標題欄來顯示一個進度條,這就需要先對視窗的顯示風格進行設定"requestWindowFeature(Window.FEATURE_PROGRESS)"。 
   我們看看這個樣本程式的 運行效果

 

先上布局檔案:

 1 <?xml version="1.0" encoding="utf-8"?>  2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  3     android:orientation="vertical"  4     android:layout_width="fill_parent"  5     android:layout_height="fill_parent"  6     >  7 <TextView   8     android:layout_width="fill_parent"  9     android:layout_height="wrap_content" 10     android:text="@string/hello" 11     /> 12 13 <ProgressBar 14 android:id="@+id/ProgressBar01" 15 style="?android:attr/progressBarStyleHorizontal" 16 android:layout_width="200dp" 17 android:layout_height="wrap_content" 18 android:visibility="gone" 19 /> 20 21 <ProgressBar 22 android:id="@+id/ProgressBar02" 23 style="?android:attr/progressBarStyleLarge" 24 android:layout_width="wrap_content" 25 android:layout_height="wrap_content" 26 android:max="100" 27 android:progress="50" 28 android:secondaryProgress="70" 29 android:visibility="gone" 30 /> 31 32 <Button 33 android:id="@+id/Button01" 34 android:layout_width="wrap_content" 35 android:layout_height="wrap_content" 36 android:text="開始"/> 37 38 </LinearLayout>

ProgressBar01 為長形進度條,Progress02為圓形進度條,標題列進度條沒有在這裡聲明。"style="表示設定進度條的風格。下面通過setMax方法設定進度條的最大值,setProgress 方法設定進度條的當前值,setVisibility 方法設定進度條的可見度。

 

package xiaohang.zhimeng;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.view.View;import android.view.Window;import android.widget.Button;import android.widget.ProgressBar;public class Activity01 extends Activity {        //聲明ProgressBar對象        private ProgressBar xh_ProgressBar;        private ProgressBar xh_ProgressBar2;        private Button xh_Button;        protected static final int GUI_STOP_NOTIFIER = 0x108;        protected static final int GUI_THREADING_NOTIFIER = 0x109;        public int intCounter = 0;        @Override        public void onCreate(Bundle savedInstanceState) {                super.onCreate(savedInstanceState);                //設定視窗模式,因為需要顯示進度條在標題列                requestWindowFeature(Window.FEATURE_PROGRESS);                setProgressBarVisibility(true);                setContentView(R.layout.main);                //得到ProgressBar                xh_ProgressBar = (ProgressBar) findViewById(R.id.ProgressBar01);                xh_ProgressBar2 = (ProgressBar) findViewById(R.id.ProgressBar02);                xh_Button = (Button) findViewById(R.id.Button01);                //設定進度條 不為 不確定模式                xh_ProgressBar.setIndeterminate(false);                xh_ProgressBar2.setIndeterminate(false);                //當按鈕按下時開始執行                xh_Button.setOnClickListener(new Button.OnClickListener() {                        @Override                        public void onClick(View v) {                                //設定ProgressBar為可見狀態                                xh_ProgressBar.setVisibility(View.VISIBLE);                                xh_ProgressBar2.setVisibility(View.VISIBLE);                                //設定ProgressBar的最大值                                xh_ProgressBar.setMax(100);                                //設定ProgressBar當前值                                xh_ProgressBar.setProgress(0);                                xh_ProgressBar2.setProgress(0);                                //通過線程來改變ProgressBar的值                                new Thread(new Runnable() {                                        @Override                                        public void run() {                                                for (int i = 0; i < 10; i++) {                                                        try {                                                                //設定進度值                                                                intCounter = (i + 1) * 20;                                                                //睡眠1000毫秒                                                                Thread.sleep(1000);                                                                if (i == 4) {                                                                        Message m = new Message();                                                                        m.what = Activity01.GUI_STOP_NOTIFIER;                                                                        Activity01.this.myMessageHandler                                                                                        .sendMessage(m);                                                                        break;                                                                } else {                                                                        Message m = new Message();                                                                        m.what = Activity01.GUI_THREADING_NOTIFIER;                                                                        Activity01.this.myMessageHandler                                                                                        .sendMessage(m);                                                                }                                                        } catch (Exception e) {                                                                e.printStackTrace();                                                        }                                                }                                        }                                }).start();                        }                });        }        Handler myMessageHandler = new Handler() {                @Override                public void handleMessage(Message msg) {                        switch (msg.what) {                        //ProgressBar已經是最大值                        case Activity01.GUI_STOP_NOTIFIER:                                xh_ProgressBar.setVisibility(View.GONE);                                xh_ProgressBar2.setVisibility(View.GONE);                                Thread.currentThread().interrupted();                                break;                        case Activity01.GUI_THREADING_NOTIFIER:                                if (!Thread.currentThread().isInterrupted()) {                                        //改變ProgressBar的當前值                                        xh_ProgressBar.setProgress(intCounter);                                        xh_ProgressBar2.setProgress(intCounter);                                        //設定標題列中前景的一個進度條進度值                                        setProgress(intCounter * 100);                                }                                break;                        }                        super.handleMessage(msg);                }        };}

 

 

 

http://bbs.droidstouch.com/thread-105-1-3.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.