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

这篇博客介绍了如何在Android应用中使用ProgressDialog创建进度对话框,包括XML布局和Java代码实现。通过点击按钮触发对话框显示,模拟填充100个元素的数组并更新进度,最后关闭对话框。
摘要由CSDN通过智能技术生成


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;
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值