一个安卓应用,在进行复杂的操作时,往往会显示一个等待对话框,此时可以通过安卓提供的进度条处理(PrpgressBar),下面介绍安卓进度条的实现。
1、xml文件中有一个ProgressBar组件和一个按钮(Button)组件,点击按钮显示进度条:
<RelativeLayout xmlns: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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:background="@drawable/bg2"
android:padding="5dip"
>
<!-- android:secondaryProgress="90"第二进度条默认值 -->
<ProgressBar
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:secondaryProgress="90"
android:visibility="gone"
style="?android:attr/progressBarStyleHorizontal"
android:id="@+id/proFirst"
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginTop="360dip"
android:text="@string/progress"
android:onClick="mainClick"
android:id="@+id/showProgress"
/>
</RelativeLayout>
2、实现代码如下:
package com.example.progressbartest;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ProgressBar;
public class MainActivity extends Activity {
private ProgressBar proFirst;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
proFirst = (ProgressBar)findViewById(R.id.proFirst);
}
//按钮事件
public void mainClick(View v)
{
proFirst.setVisibility(View.VISIBLE);//进度条可见
proFirst.setProgress(0);//设置当前进度
proFirst.setMax(100);//设置进度最大值
new Thread(new Runnable() {
//重写run方法,将任务封装
public void run()
{
int count = 0;//保存当前进度值
for(int i=0;i<20;i++){
try {
count = (i+1)*20;//进度每次增量
Thread.sleep(1000);//线程休眠1秒,否则进度瞬间完成
if(i==5){
Message message = new Message();//消息类,将指定的消息封装
message.what = 1;//消息代码
messageHandler.sendMessage(message);//发送消息
break;
}
proFirst.setProgress(count);//设置当前进度
proFirst.setMax(100);//设置进度最大值
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
//线程直接的消息机制Handler
public Handler messageHandler = new Handler(){
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
proFirst.setVisibility(View.GONE);
break;
default:
break;
}
super.handleMessage(msg);
}
};
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
3、运行效果如下: