全州建设完小网站,vi设计的概念,中企动力网站价格,网页浏览器插件首先在onCreateDialog方法里创建一个ProgressDialog,如下#xff1a; //this表示该对话框是针对当前Activity的 progressDialog new ProgressDialog(this); //设置最大值为100 progressDialog.setMax(100); //设置进度条风格STYLE_HORIZONTAL progressDialog.setProgressStyl… 首先在onCreateDialog方法里创建一个ProgressDialog,如下 //this表示该对话框是针对当前Activity的 progressDialog new ProgressDialog(this); //设置最大值为100 progressDialog.setMax(100); //设置进度条风格STYLE_HORIZONTAL progressDialog.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle(进度条对话框); 复制代码 接下来就是进度条的进度更新因为对话框对象一直被当前Dialog保存着所以onCreateDialog在下次调用对话框时不会在被调所以 进度条更新操作不能在onCreateDialog里面而是在onPrepareDialog里面进行。 首先要将进度条置为0 progressDialog.incrementProgressBy(-progressDialog.getProgress()); 复制代码 increamentProgressBy源码中是调用了ProgressBar的setProgress(mProgress diff); mProgress是当前进度值这里的diff就是-progressDialog.getProgress(),最后结果为0所以也可以这么用效果和调用incrementProgressBy一样的如下 progressDialog.onStart(); progressDialog.setProgress(0); 复制代码 值得一提的是不能直接只用setProgress(0)来设置这样的话第一次弹出对话框效果可以和上面的一样但是之后再弹出对话框的进度一直都是100。为什么这里不能直接用setProgress(0),查看源码可以知道 if (mHasStarted) { mProgress.setProgress(value); onProgressChanged(); } else { mProgressVal value; } 复制代码 mHasStarted第一次调用的时候是true当进度条达到100%时会调用onStop方法(此方法为protected,无法直接调用)将mHasStarted设置为false也就是无法setProgress(value)了只能通过onStart来将mHasStarted设置为true。 当点击“显示进度条对话框”按钮这时候需要很耗时然后才显示对话框而往往都会导致假死如果超过5秒未响应将强制关闭所以这里需要添加个多线程来做进一步处理。而进度条的增加效果是很快的所以这这里需要让大家看到效果得停几毫秒后再继续。 为了使主线程不受影响(处理当前Activity的线程)在点击按钮且耗时操作完后需要发送消息给主线程主线程再做相应处理。线程之间的消息传递和异步处理是通过Handler来做处理的相关代码如下 new Thread() { public void run() { for(int i0; i100; i) { handler.sendEmptyMessage(INCREASE); if(progressDialog.getProgress() 100) { break; } try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); 复制代码 Handler的处理如下Handler具体说明网上很多可以参考此处http://my.unix-center.net/~Simon_fu/?p652 handler new Handler() { Override public void handleMessage(Message msg) { switch(msg.what) { case INCREASE: progressDialog.incrementProgressBy(1); if(progressDialog.getProgress() 100) { // progressDialog.dismiss(); } break; } super.handleMessage(msg); } }; 复制代码 解释就到这里先看个效果图 2011-6-16 09:14 上传 下载附件(23.27 KB) 实现步骤 第一步一个按钮用来点击后弹出对话框的 res/layout/progress_dialog_layout.xml ?xml version1.0 encodingutf-8? LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/android android:layout_widthfill_parent android:layout_heightwrap_content Button android:idid/button android:text显示进度条对话框 android:layout_widthfill_parent android:layout_heightwrap_content/ /LinearLayout 复制代码 第二步 src/com/dialog/activity/ProgressDialogActivity.java package com.dialog.activity; import android.app.Activity; import android.app.Dialog; import android.app.ProgressDialog; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.Button; public class ProgressDialogActivity extends Activity { private final int PROGRESS_DIALOG 1; private final int INCREASE 0; private ProgressDialog progressDialog null; private Handler handler null; Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.progress_dialog_layout); Button button (Button) findViewById(R.id.button); View.OnClickListener listener new View.OnClickListener() { Override public void onClick(View view) { showDialog(PROGRESS_DIALOG); } }; button.setOnClickListener(listener); handler new Handler() { Override public void handleMessage(Message msg) { switch(msg.what) { case INCREASE: progressDialog.incrementProgressBy(1); if(progressDialog.getProgress() 100) { // progressDialog.dismiss(); } break; } super.handleMessage(msg); } }; } Override public Dialog onCreateDialog(int id) { switch(id) { case PROGRESS_DIALOG: //this表示该对话框是针对当前Activity的 progressDialog new ProgressDialog(this); //设置最大值为100 progressDialog.setMax(100); //设置进度条风格STYLE_HORIZONTAL progressDialog.setProgressStyle( ProgressDialog.STYLE_HORIZONTAL); progressDialog.setTitle(进度条对话框); break; } return progressDialog; } Override public void onPrepareDialog(int id, Dialog dialog) { switch(id) { case PROGRESS_DIALOG: //将进度条清0 progressDialog.incrementProgressBy(-progressDialog.getProgress()); new Thread() { public void run() { for(int i0; i100; i) { handler.sendEmptyMessage(INCREASE); if(progressDialog.getProgress() 100) { break; } try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); break; } } }