现在的位置: 首页 > 综合 > 正文

Android 程式开发:(十)基本控件 —— 10.3 ProgressBar

2013年07月09日 ⁄ 综合 ⁄ 共 4989字 ⁄ 字号 评论关闭

当执行某些正在处理的任务时,ProgressBar提供了一个可视化的反馈。例如,你在从web服务器下载数据,然后需要更新下载的状态。在这种情况下,ProgressBar就是一个很好的选择。下面的例子,展示如何去使用ProgressBar。

1. 创建一个工程,BasicViews2。

2. main.xml中的代码。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7. <ProgressBar android:id="@+id/progressbar"  
  8.     android:layout_width="wrap_content"   
  9.     android:layout_height="wrap_content" />  
  10.   
  11. </LinearLayout>  

3、Basic2Activity.java中的代码。

  1. public class BasicViews2Activity extends Activity {  
  2.     static int progress;  
  3.     ProgressBar progressBar;  
  4.     int progressStatus = 0;  
  5.     Handler handler = new Handler();  
  6.   
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.           
  13.         progress = 0;  
  14.         progressBar = (ProgressBar) findViewById(R.id.progressbar);  
  15.           
  16.         //---do some work in background thread---  
  17.         new Thread(new Runnable()  
  18.         {  
  19.             public void run()  
  20.             {  
  21.                 //?do some work here?  
  22.                 while (progressStatus < 10)  
  23.                 {  
  24.                     progressStatus = doSomeWork();  
  25.   
  26.                 }  
  27.   
  28.                 //---hides the progress bar---  
  29.                 handler.post(new Runnable()  
  30.                 {  
  31.                     public void run()  
  32.                     {  
  33.                         //---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---  
  34.                         progressBar.setVisibility(View.GONE);  
  35.                     }  
  36.                 });  
  37.             }  
  38.   
  39.             //---do some long running work here---  
  40.             private int doSomeWork()   
  41.             {  
  42.                 try {  
  43.                     //---simulate doing some work---  
  44.                     Thread.sleep(500);  
  45.                 } catch (InterruptedException e)  
  46.                 {  
  47.                     e.printStackTrace();  
  48.                 }  
  49.                 return ++progress;  
  50.             }  
  51.         }).start();  
  52.     }  
  53. }  

4、F11调试,会看见ProgressBar的动画,5秒之后,动画消失。

接下来展示如何自定义ProgressBar的样式。

1. 使用之前的例子,修改main.xml。

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="vertical" >  
  6.   
  7. <ProgressBar android:id="@+id/progressbar"  
  8.     android:layout_width="wrap_content"   
  9.     android:layout_height="wrap_content"  
  10.     style="@android:style/Widget.ProgressBar.Horizontal" />  
  11.   
  12. </LinearLayout>  

2. Basic2Activity.java中的代码。

  1. public class BasicViews2Activity extends Activity {  
  2.     static int progress;  
  3.     ProgressBar progressBar;  
  4.     int progressStatus = 0;  
  5.     Handler handler = new Handler();  
  6.   
  7.     /** Called when the activity is first created. */  
  8.     @Override  
  9.     public void onCreate(Bundle savedInstanceState) {  
  10.         super.onCreate(savedInstanceState);  
  11.         setContentView(R.layout.main);  
  12.           
  13.         progress = 0;  
  14.         progressBar = (ProgressBar) findViewById(R.id.progressbar);  
  15.         progressBar.setMax(200);  
  16.           
  17.         //---do some work in background thread---  
  18.         new Thread(new Runnable()  
  19.         {  
  20.             public void run()  
  21.             {  
  22.                 //?do some work here?  
  23.                 while (progressStatus < 100)  
  24.                 {  
  25.                     progressStatus = doSomeWork();  
  26.   
  27.                     //?Update the progress bar?  
  28.                     handler.post(new Runnable()  
  29.                     {  
  30.                         public void run() {  
  31.                             progressBar.setProgress(progressStatus);  
  32.                         }  
  33.                     });  
  34.                 }  
  35.   
  36.                 //---hides the progress bar---  
  37.                 handler.post(new Runnable()  
  38.                 {  
  39.                     public void run()  
  40.                     {  
  41.                         //---0 - VISIBLE; 4 - INVISIBLE; 8 - GONE---  
  42.                         progressBar.setVisibility(View.GONE);  
  43.                     }  
  44.                 });  
  45.             }  
  46.   
  47.             //---do some long running work here---  
  48.             private int doSomeWork()   
  49.             {  
  50.                 try {  
  51.                     //---simulate doing some work---  
  52.                     Thread.sleep(50);  
  53.                 } catch (InterruptedException e)  
  54.                 {  
  55.                     e.printStackTrace();  
  56.                 }  
  57.                 return ++progress;  
  58.             }  
  59.         }).start();  
  60.     }  
  61. }  

3. F11调试。

4. 当ProgressBar的进度到达50%的时候,它就会消失。

附:

ProgressBar的样式列表。

  • Widget.ProgressBar.Horizontal
  • Widget.ProgressBar.Small
  • Widget.ProgressBar.Large
  • Widget.ProgressBar.Inverse
  • Widget.ProgressBar.Small.Inverse
  • Widget.ProgressBar.Large.Inverse

抱歉!评论已关闭.