zoukankan      html  css  js  c++  java
  • Android开发系列(二十七):使用ProgressDialog创建进度对话框

    进度对话框在寻常的应用中非经常见,比方下载的时候,打开页面的时候、转移文件等等。有环形的、有长条形的。

    基本就这两种

    创建进度对话框的两种方式:

    1、创建ProgressDialog实例,然后调用ProgressDialog提供的静态show()方法显示实例就可以

    2、创建ProgressDialog实例,然后调用方法对进度条进行设置,然后显示出来。


    长条形的进度条还分为两种。第一种是显示运行进度,另外一种是不显示运行进度。

    在接下来的样例中。我们会看到三种:环形进度条、显示运行进度的长条形进度条、不显示运行进度的长条形进度条


    首先,我们创建一个Android项目,然后编写main.xml文件:

    <?

    xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="环形进度条" android:onClick="showSpinner" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="不显示运行进度的进度条" android:onClick="showIndeterminate" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="显示运行进度的进度条" android:onClick="showProgress" /> </LinearLayout>

    这里定义了三个button。三个button相应了相应的onClick属性


    接下来,是ProgressDialogTest.java:

    package org.crazyit.ui;
    
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    
    
    public class ProgressDialogTest extends Activity
    {
    	final static int MAX_PROGRESS = 100;
    	// 该程序模拟填充长度为100的数组
    	private int[] data = new int[50];
    	// 记录进度对话框的完毕百分比
    	int progressStatus = 0;
    	int hasData = 0;
    	ProgressDialog pd1,pd2;
    	// 定义一个负责更新的进度的Handler
    	Handler handler = new Handler()
    	{
    		@Override
    		public void handleMessage(Message msg)
    		{
    			// 表明消息是由该程序发送的。
    			if (msg.what == 0x123)
    			{
    				pd2.setProgress(progressStatus);
    			}
    		}
    	};
    	@Override
    	public void onCreate(Bundle savedInstanceState)
    	{
    		super.onCreate(savedInstanceState);
    		setContentView(R.layout.main);
    	}
    
    	public void showSpinner(View source)
    	{
    		// 调用静态方法显示环形进度条
    		ProgressDialog.show(this, "任务运行中"
    			, "任务运行中。请等待", false, true); //①
    	}
    
    	public void showIndeterminate(View source)
    	{
    		pd1 = new ProgressDialog(ProgressDialogTest.this);
    		// 设置对话框的标题
    		pd1.setTitle("任务正在运行中");
    		// 设置对话框显示的内容
    		pd1.setMessage("任务正在运行中,敬请等待...");
    		// 设置对话框能用“取消”button关闭
    		pd1.setCancelable(true);
    		// 设置对话框的进度条风格
    		pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    		// 设置对话框的进度条是否显示运行进度
    		pd1.setIndeterminate(true);
    		pd1.show(); //②
    	}
    
    	public void showProgress(View source)
    	{
    		// 将进度条的完毕进度重设为0
    		progressStatus = 0;
    		// 又一次開始填充数组。

    hasData = 0; pd2 = new ProgressDialog(ProgressDialogTest.this); pd2.setMax(MAX_PROGRESS); // 设置对话框的标题 pd2.setTitle("任务完毕百分比"); // 设置对话框 显示的内容 pd2.setMessage("耗时任务的完毕百分比"); // 设置对话框不能用“取消”button关闭 pd2.setCancelable(false); // 设置对话框的进度条风格 pd2.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); // 设置对话框的进度条是否显示运行进度 pd2.setIndeterminate(false); pd2.show(); //③ new Thread() { public void run() { while (progressStatus < MAX_PROGRESS) { // 获取耗时操作的完毕百分比 progressStatus = MAX_PROGRESS * doWork() / data.length; // 发送空消息到Handler handler.sendEmptyMessage(0x123); } // 假设任务已经完毕 if (progressStatus >= MAX_PROGRESS) { // 关闭对话框 pd2.dismiss(); } } }.start(); } // 模拟一个耗时的操作。

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

    在进行第三个:显示运行进度的进度条的时候,我们用到了Thread线程,来模拟一个耗时的操作


    这是效果图:


  • 相关阅读:
    Apache Log4j 学习笔记
    关于BindingResult
    Java源码分析:深入探讨Iterator模式
    hibernate的ID生成策略(annotation方式@GeneratedValue)
    HTML5本地存储不完全指南
    pageX,clientX,offsetX,layerX的那些事
    getHibernateTemplate().execute(new HibernateCallback())方法
    jQuery.extend 与 jQuery.fn.extend 的区别
    16个优秀的JavaScript教程和工具推荐
    Spring 2.5:Spring MVC中的新特性
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6904917.html
Copyright © 2011-2022 走看看