Android进度条使用详解(一)

    进度条是UI界面中一种非常实用的组件,通常用于向用户像是某个耗时操作完成的百分比。进度条可动态地显示进度,因此避免长时间地执行某个操作时,让用户感觉程序失去了响应,从而更好地提高用户界面的友好性。ProgressBar本身代表着进度条组件,其子类还包括SeekBar(拖动条)和RatingBar(星级评分条)。
一、ProgressBar使用详解
1.环形进度条使用方法
(1)进度条样式
技术分享
技术分享
(2)代码实现
  1.  <ProgressBar android:id="@+id/progressBar"  
  2.    android:layout_width="wrap_content"   
  3.     android:layout_height="wrap_content"  
  4.     style="@android:style/Widget.ProgressBar.Large"/> 
总结:我们可以通过设置ProgressBar的style属性实现不同大小的环形进度条,ProgressBar常用的XML属性如下
(1)android:max:设置该进度条的最大值;
(2)android:progress:设置该进度条的已完成进度值;
(3)android:progressDrawable:设置该进度条的轨道对应的Drawable对象;
(4)android:indeterminate:该属性设为true,设置进度条不精确显示进度;
(5)android:indeteminateDrawable:设置绘制不显示进度的进度条的Drawable对象;
(6)android:indeteminateDuration:设置不精确显示进度的持续时间
(7)style属性:设置进度条的风格,支持以下几个属性
    ◇@android:style/Widget.ProgressBar.Horizontal:水平进度条
    ◇@android:style/Widget.ProgressBar.Inverse:普通大小的进度条
    ◇@android:style/Widget.ProgressBar.Large:大环形进度条
    ◇@android:style/Widget.ProgressBar.Large.Inverse:大环形进度条
    ◇@android:style/Widget.ProgressBar.Small:小环形进度条
    ◇@android:style/Widget.ProgressBar.Small.Inverse:小环形进度条
2.显示进度精度进度条使用方法
(1)进度条样式
技术分享
技术分享
(2)代码实现
>业务逻辑代码:模拟进度条的进度显示
  1. public class MainActivity extends ActionBarActivity {  
  2.  private int[] data = new int[100];  
  3.  int hasData = 0;  
  4.  int status = 0;  
  5.  ProgressBar bar, bar1;  
  6.  // 创建一个负责更新的进度的Handler  
  7.  Handler handler = new Handler() {  
  8.   public void handleMessage(android.os.Message msg) {  
  9.    if (msg.what == 0x111) {  
  10.     bar.setProgress(status);  
  11.     bar1.setProgress(status);  
  12.    }  
  13.   };  
  14.  };  
  15.  @Override  
  16.  protected void onCreate(Bundle savedInstanceState) {  
  17.   super.onCreate(savedInstanceState);  
  18.   setContentView(R.layout.main);  
  19.   bar = (ProgressBar) findViewById(R.id.progressBar);  
  20.   bar1 = (ProgressBar) findViewById(R.id.progressBar1);  
  21.   // 启动线程来执行任务  
  22.   new Thread(new Runnable() {  
  23.    public void run() {  
  24.     while (status < 100) {  
  25.      status = doWork(); // 获取耗操作的完成百分比  
  26.      handler.sendEmptyMessage(0x111); // 发送消息  
  27.     }  
  28.    }  
  29.   }).start();  
  30.  }  
  31.  // 模拟一个耗时任务  
  32.  public int doWork() {  
  33.   data[hasData++] = (int) (Math.random() * 100);  
  34.   try {  
  35.    Thread.sleep(100);  
  36.   } catch (InterruptedException e) {  
  37.    e.printStackTrace();  
  38.   }  
  39.   return hasData;  
  40.  }  
  41. } 
>布局: 
  1. <ProgressBar  
  2.         android:id="@+id/progressBar"  
  3.         style="@android:style/Widget.ProgressBar.Horizontal"  
  4.         android:layout_width="match_parent"  
  5.          android:layout_height="100dp"   
  6.         android:max="100" />   
  7.     <ProgressBar  
  8.         android:id="@+id/progressBar1"  
  9.         style="@android:style/Widget.ProgressBar.Horizontal"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="100dp"  
  12.         android:max="100"  
  13.         android:progressDrawable="@drawable/mybar" />  
其中,mybar.xml用于设置进度条的轨道背景以及定义轨道上已完成部分的样式,代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.     <!-- 定义轨道的背景 -->  
  4.     <item  
  5.         android:id="@android:id/background"  
  6.         android:drawable="@drawable/ic_launcher"/>  
  7.     <!-- 定义轨道上已经完成部分的样式 -->  
  8.     <item  
  9.         android:id="@android:id/progress"  
  10.         android:drawable="@drawable/android"/>  
  11. </layer-list>  
3.对话框进度条
(1)进度条样式
技术分享
技术分享
(2)代码实现
  1.  final ProgressDialog mypDialog=new ProgressDialog(MainActivity.this); //实例化一个进度条对话框  
  2.        mypDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);         //设置进度条风格  
  3.        mypDialog.setTitle("进度条对话框演示");                                          //设置进度条标题  
  4.        mypDialog.setMessage("任务正在执行中,请稍后");                        //设置提示信息  
  5.        mypDialog.setIcon(R.drawable.android);                                               //设置图标  
  6.        mypDialog.setIndeterminate(true);                                                          //设置是否精度显示进度  
  7.        mypDialog.setCancelable(false);                                                            //设置是否触屏取消  
  8.        mypDialog.setButton(DialogInterface.BUTTON_POSITIVE, "取消执行"new DialogInterface.OnClickListener() {  
  9.                  public void onClick(DialogInterface dialog, int which) {                //设置按钮  
  10.                               mypDialog.dismiss();  
  11.                      } });       
  12.       mypDialog.show();   
4.向AlertDialog对话框中加入进度条
(1)进度条样式
技术分享
技术分享
(2)代码实现
  1.  myup=(Button) myLayout.findViewById(R.id.myView_BT_Up);(myProgressBar.incrementProgressBy(5);)  
  2.    mydown=(Button) myLayout.findViewById(R.id.myView_BT_Down);(myProgressBar.incrementProgressBy(-5);)  
  3.    myprogress=(ProgressBar)myLayout.findViewById(R.id.myView_ProgressBar);  
  4.   AlertDialog alertDialog = new AlertDialog(this);  
  5.    LayoutInflater  layoutInflater=(LayoutInflater) getSystemService(this.LAYOUT_INFLATER_SERVICE);  
  6.    LinearLayout myLayout=(LinearLayout) layoutInflater.inflate(R.layout.myview, null);  
  7.    myProgressBar.setProgress(Tag);                            //进度条进度初始值为0  
  8.    alertDialog.setTitle("长形进度条");  
  9.    alertDialog.setIcon(R.drawable.Android);  
  10.    alertDialog.setMessage("测试View加入进度条");  
  11.    alertDialog.setView(myLayout);  
  12.    alertDialog.setPositiveButton("OK"new DialogInterface.OnClickListener(){  
  13.         public void onClick(DialogInterface dialog, int which) {  
  14.                  Tag=myProgressBar.getProgress();            //获得当前进度条的值  
  15.         }});  
  16.    AlterD.show();  
其中,R.layout.myview.xml代码如下:
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="wrap_content"  
  4.     android:layout_height="wrap_content"  
  5.     android:layout_gravity="center_horizontal" >  
  6.     <Button  
  7.         android:id="@+id/myView_BT_Down"  
  8.         android:layout_width="50dp"  
  9.         android:layout_height="wrap_content"  
  10.         android:text="-" >  
  11.     </Button>  
  12.     <ProgressBar  
  13.         android:id="@+id/myView_ProgressBar"  
  14.         style="?android:attr/progressBarStyleHorizontal"  
  15.         android:layout_width="178dp"  
  16.         android:layout_height="wrap_content"  
  17.         android:layout_gravity="center_vertical"  
  18.         android:progress="57" >  
  19.     </ProgressBar>  
  20.     <Button  
  21.         android:id="@+id/myView_BT_Up"  
  22.         android:layout_width="50dp"  
  23.         android:layout_height="wrap_content"  
  24.         android:text="+" >  
  25.     </Button>  
  26. </LinearLayout>  

二、在标题上显示进度条方法
技术分享
技术分享
1.主要步骤如下    
    (1)首先,调用Activity的requestWindowFeature()方法,该方法根据传入的参数可启用特定的窗口特征。例如传入Window.FEATURE_INDETERMINATE_PROGRESS在窗口标题上显示不带进度条的进度条;传入Window.FEATURE_PROGRESS则显示带进度的进度条。
    (2)然后,调用Activity的SetProgressBarVisibility(boolean)或setProgressBarIndeterminateVisibility(boolean)方法即可控制进度条的显示和隐藏。
2.代码如下
  1. protected void onCreate(Bundle savedInstanceState) {  
  2.   //设置窗口特征:启动显示进度的进度条  
  3.   requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);  
  4.   //设置窗口特征:启动显示不带进度的进度条  
  5. //   requestWindowFeature(Window.FEATURE_PROGRESS);  
  6.   super.onCreate(savedInstanceState);  
  7.   setContentView(R.layout.main);  
  8.   Button btn1 = (Button)findViewById(R.id.btn1);  
  9.   btn1.setOnClickListener(new OnClickListener() {  
  10.    public void onClick(View v) {  
  11. //   setProgressBarVisibility(true);  
  12.     setProgressBarIndeterminateVisibility(true);  
  13.    }  
  14.   });  
  15.  }  
  16.  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。