progressbar控件是android开发过程中会经常用到的,也成为进度条。描述一个task工作的进度,分为两种,一种是没有进度显示;一种有进度显示;这两种的区别就在于其style不同,现在详细讲解progressbar的使用方法。
先来看效果图:
这个activity中有4个控件分别是两个progressbar和两个button,和两个布局控件。
来看一看布局文件:
<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:weightSum="1"
xmlns:android="http://schemas.android.com/apk/res/android">
<ProgressBar
android:id="@+id/u_pgb"
android:max="200"
android:layout_height="30dip"
android:layout_width="200dip"
style="?android:attr/progressBarStyleHorizontal"
android:visibility="invisible"
/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/u_pgb2"
android:max="300"
style="?android:attr/progressBarStyle"
android:visibility="invisible"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:layout_marginTop="20dip"
>
<Button
android:id="@+id/u_bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="增加"
android:textSize="24dip"
/>
<Button
android:layout_marginLeft="30dip"
android:id="@+id/u_bt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="减少"
android:textSize="24dip"
/>
</LinearLayout>
</LinearLayout>
这里要说明一下progressbar的几个常用属性:
1.style属性 常用的有“?android:attr/progressBarStyleHorizontal”和"?android:attr/progressBarStyle"分别对应着效果图里面的水平进度条,和圆形进度条。
2.android:max属性 设置进度条总进度
3.android: android:visibility设置布局产生时progressbar是否显示,常用的有gone(不显示并且不占用布局空间)、invisible(不显示但占用布局空间)、visible(显示)
然后来看一下代码:
package com.example.testprogressbar;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button bt1=null;
private Button bt2=null;
private ProgressBar pgb1=null;
private ProgressBar pgb2=null;
private int i=0;
private int t=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.user);
//取得各个控件
pgb1=(ProgressBar)findViewById(R.id.u_pgb);
pgb2=(ProgressBar)findViewById(R.id.u_pgb2);
bt1=(Button) findViewById(R.id.u_bt1);
bt2=(Button) findViewById(R.id.u_bt2);
//第一个button负责增加进度条进度
bt1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(i==0)
{ //当按钮被点击是进度条显示
pgb1.setVisibility(View.VISIBLE);
pgb2.setVisibility(View.VISIBLE);
}
else if(i<pgb1.getMax())
{ //再点击按钮会增加进度
pgb1.setProgress(i);
pgb1.setSecondaryProgress(i+10);//设置第二进度
pgb2.setProgress(i);
t=pgb1.getProgress();//获得水平进度条的当前进度
}
else {
pgb1.setVisibility(View.INVISIBLE);
pgb2.setVisibility(View.GONE);
}
//每点击一次按钮i自增10
i+=10;
}
});
bt2.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if(t<=0)
{ //当进度条进度为0的时候点击减少按钮会显示Toast
Toast.makeText(getApplicationContext(), "you can't decrease!", Toast.LENGTH_LONG).show();
}
else if(t>0)
{ //每次点击“减少按钮”进度条进度减少20
t-=20;
pgb1.setProgress(t);
}
else {
pgb1.setVisibility(View.GONE);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}