进度条对话框ProgressDialog经常用于不能马上完成的操作,为了避免用户莫名其妙的等待,给用户一个提示。本例中我们演示了两种进度条:条形进度条和圆形进度条。

1 主Acitivity的布局

<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"    android:orientation="vertical"    tools:context=".MainActivity" >    <Button        android:id="@+id/progress_horizonal"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="水平进度条"        android:textSize="20sp" />    <Button        android:id="@+id/progress_circle"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:text="圆形进度条"        android:textSize="20sp" /></LinearLayout>

2MainActivity的编写

package com.example.progressdialog;import java.util.Random;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.app.Activity;import android.app.ProgressDialog;import android.content.DialogInterface;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;public class MainActivity extends Activity {private Button btn_horizonal = null;private Button btn_circle = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);inital();setBtnOnClickListener();}@Overridepublic 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;}private void inital() {btn_horizonal = (Button) findViewById(R.id.progress_horizonal);btn_circle = (Button) findViewById(R.id.progress_circle);}private void setBtnOnClickListener() {btn_horizonal.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowProgressDialog(ProgressDialog.STYLE_HORIZONTAL,"正在努力处理数据...", "请稍后...");}});btn_circle.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubshowProgressDialog(ProgressDialog.STYLE_SPINNER, "正在努力删除...","请稍后...");}});}    /**进度条的最大值*/private static final int MAX_PROGRESS_VALUE = 100;private ProgressDialog progressDialog = null;private Handler progressHandler = null;/**记录当前进度的值*/private int progress = 0;    /**     * 显示进度对话框     * @param style 进度框风格,长方形还是圆形     * @param title 显示的title     * @param message 显示的提示信息     */private void showProgressDialog(int style, String title, String message) {// 创建ProgressDialog类的对象实体progressDialog = new ProgressDialog(this);progressDialog.setIcon(R.drawable.ic_launcher);//设置标题progressDialog.setTitle(title);//设置显示的提示信息progressDialog.setMessage(message);// 设置进度对话框的风格progressDialog.setProgressStyle(style);// 设置ProgressDialog不可以按退回按键取消         progressDialog.setCancelable(false); // 设置进度对话框的进度最大值progressDialog.setMax(MAX_PROGRESS_VALUE);//设置暂停按钮progressDialog.setButton("暂停", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub// 删除消息队列中的消息来停止计时器progressHandler.removeMessages(1);}});//设置取消按钮progressDialog.setButton2("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {// TODO Auto-generated method stub// 删除消息队列中的消息来停止定时器progressHandler.removeMessages(1);progress = 0;progressDialog.setProgress(0);dismissProgressDialog();}});progressDialog.show();progressHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);if (progress >= MAX_PROGRESS_VALUE) {// 进度达到了最大值,关闭对话框progress = 0;dismissProgressDialog();} else {// 进度增一progress++;progressDialog.incrementProgressBy(1);// 第一个参数表示消息代码,第二个参数表示下一次调用handlerMessage要等待的毫秒数progressHandler.sendEmptyMessageDelayed(1,500 + new Random().nextInt(500));}}};// 设置进度条的初始值progress = (progress > 0) ? progress : 0;// 设置进度框中的进度值progressDialog.setProgress(progress);// 发送消息代码progressHandler.sendEmptyMessage(1);}/** * 让进度对话框消失 */private void dismissProgressDialog(){progressDialog.dismiss();}}

实际效果如下: Android学习之ProgressDialog_第1张图片 Android学习之ProgressDialog_第2张图片 Android学习之ProgressDialog_第3张图片

更多相关文章

  1. Android消息循环机制源码分析
  2. 自定义Android六边形进度条(附源码)
  3. Android消息机制之四---Looper,Handler,Message例子
  4. Android怎么去除Dialog对话框的白色边框
  5. Android 消息机制 进程调度问题
  6. 在Android Service中弹出系统全屏对话框

随机推荐

  1. Android应用程序启动过程源代码分析(4)
  2. android中读取联系人和通话记录
  3. Android资源加载过程分析
  4. android收藏
  5. SeekBar
  6. Android第三十八期 - 评价标签FlowLayout
  7. ScrollVie滚动条
  8. Android(安卓)视频播放器
  9. Android Wifi模块分析(七)
  10. 文件读写