使用ProgressDialog创建进度对话框-showDialog方式


xml文件

<LinearLayout 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"
    tools:context=".MainActivity" 
    android:orientation="vertical">

    <Button 
        android:id="@+id/mybut"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:text="点击下载"/>

</LinearLayout>

java文件

package com.example.progressdialog;


import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;


public class MainActivity extends Activity {


final int PROGRESS_DIALOG=0x112;

ProgressDialog pd;

//记录进度对话框的完成百分比
int progressStatus=0;
//该程序模拟填充长度为100的数组
private int[] data=new int[100];

int hasData=0;
Button mybut;

//定义一个负责更新进度的Handler
Handler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mybut=(Button) super.findViewById(R.id.mybut);

//为按钮设置监听
mybut.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
showDialog(PROGRESS_DIALOG);

}
});

handler=new Handler(){
public void handleMessage(Message msg){
//表明消息是由该程序发送的
if(msg.what==0x111){
pd.setProgress(progressStatus);
}
}
};
}


@Override
protected Dialog onCreateDialog(int id, Bundle args) {

switch(id){
case PROGRESS_DIALOG:
//创建进度对话框
pd=new ProgressDialog(MainActivity.this);
pd.setMax(100);
//设置对话框的标题
pd.setTitle("任务完成百分比");
//设置对话框显示的内容
pd.setMessage("耗时任务的完成百分比");
//设置对话框不能"取消"按钮关闭
pd.setCancelable(true);
//设置对话框进度条的风格,圆形进度条
//pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
//长方形进度条
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
//设置对话框的进度条是否显示进度
pd.setIndeterminate(false);

pd.setIcon(R.drawable.ic_launcher);

break;
}

return pd;
}


/**
* 在对话框被显示之前,Android还会调用onPrepareDialog(int, Dialog). 如果你希望每次显示对话框时有动态更改的内容, 那么就改写这个函数. 
*该函数在每次一个对话框打开时都调用. 如果你不定义该函数,则对话框每次打开都是一样的. 该函数也会传入对话框的id以及你在onCreateDialog()中创建的Dialog对象.
*/

//将对话框的进度清零
protected void onPrepareDialog(int id, Dialog dialog) {

super.onPrepareDialog(id, dialog);
switch(id){
case PROGRESS_DIALOG:
//对话框进度清零
pd.incrementProgressBy(-pd.getProgress());
new Thread(){
public void run (){
while(progressStatus<100){

progressStatus=doWork();
//发送消息到Handler
Message m=new Message();
m.what=0x111;
handler.sendMessage(m);
}
//如果任务已经完成
if(progressStatus>=100){
//关闭对话框
pd.dismiss();
}
}
}.start();
pd.show();
break;
}

}

//模拟一个耗时操作
public int doWork(){
//为数组元素赋值
data[hasData]=(int)(Math.random()*100);
hasData++;
try{
Thread.sleep(100);
}
catch(InterruptedException e){
e.printStackTrace();
}
return hasData;
}
}

展开阅读全文

没有更多推荐了,返回首页