ProgressBar是进度条,android中的指示器,先看效果图



上图中水平进度条可以看见有两种颜色,浅色的是SecondaryProgress,可以用作展示中间进度用。

ProgressBar是有多种样式的,有水平的和圆圈打转的。若需要指示进度的可以使用水平的,其他样式在可以在android api文档找到

Other progress bar styles provided by the system include:

Widget.ProgressBar.Horizontal

Widget.ProgressBar.Small

Widget.ProgressBar.Large

Widget.ProgressBar.Inverse

Widget.ProgressBar.Small.Inverse

Widget.ProgressBar.Large.Inverse

先看下布局文件activity_main.xml

<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.jam.testprogressbar.MainActivity"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/hello_world"/><ProgressBarandroid:id="@+id/id_firstbar_id"android:layout_width="150dp"android:layout_height="wrap_content"android:visibility="gone"/><ProgressBarandroid:id="@+id/id_spinningbar_id"android:layout_width="150dp"android:layout_height="wrap_content"android:visibility="gone"/><Buttonandroid:id="@+id/id_buttonfirst"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="addfirst"/><Buttonandroid:id="@+id/id_buttonsecond"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="addsecond"/></LinearLayout>

布局简单,若要修改ProgressBar,只需要改style的内容即可。


然后是MainActivity.java 的内容:

packagecom.jam.testprogressbar;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.View;importandroid.view.View.OnClickListener;importandroid.widget.Button;importandroid.widget.ProgressBar;publicclassMainActivityextendsActivity{//声明控件privateProgressBarfirstProgressBar;privateProgressBarsecondProgressBar;privateButtonbuttonFirst;privateButtonbuttonSecond;privateinti=0;privateintj=0;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);firstProgressBar=(ProgressBar)findViewById(R.id.id_firstbar_id);secondProgressBar=(ProgressBar)findViewById(R.id.id_spinningbar_id);buttonFirst=(Button)findViewById(R.id.id_buttonfirst);buttonSecond=(Button)findViewById(R.id.id_buttonsecond);/***给第一个按钮绑定匿名内部类*在i==0时,显示两个ProgressBar*i《100时,每按一次就加10。*当i超过100,则隐藏两个ProgressBar*/buttonFirst.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){if(i==0){firstProgressBar.setVisibility(View.VISIBLE);secondProgressBar.setVisibility(View.VISIBLE);i+=10;j=i;firstProgressBar.setProgress(i);firstProgressBar.setSecondaryProgress(j);}elseif(i<100){i+=10;j=i;firstProgressBar.setProgress(i);}else{i=0;j=i;firstProgressBar.setVisibility(View.GONE);secondProgressBar.setVisibility(View.GONE);}}});/***第二个按钮,对SecondaryProgress进行设置。*/buttonSecond.setOnClickListener(newOnClickListener(){@OverridepublicvoidonClick(Viewv){if(i!=0){j+=10;firstProgressBar.setSecondaryProgress(j);}}});}}

实现进度条代码比较简单,在api文档中有例子和其他具体方法,不一一介绍。




除了主线程之外的线程都叫worker thread。

ProgressBar要与线程使用,只需要写一个类继承Thread或者实现Runnable即可。


注意:在原则上来说,除主线程之外,其他线程不允许访问主线程的UI,但ProgressBar除外