zoukankan      html  css  js  c++  java
  • 使用ProgressDialog创建进度对话框

        ProgressDialog代表了进度对话框,程序只要创建ProgressDialog实例,并将它显示出来就是一个进度对画框。使用ProgressDialog创建进度对话框有如下两种方式。

        ①如果只是创建简单的对话框,调用ProgressDialog提供的静态show()方法显示对话框即可。

        ②创建ProgressDialog,然后调用方法对对话框里的进度条进行设置,设置完成后将对话框显示出来即可。

        为了对进度对话框里的进度进行设置,ProgressDialog包含了如下常用的方法。

    • setIndeterminate(boolean indeterminate):设置对话框里的进度条不显示进度值。
    • setMax(int max):设置对话框里的进度条的最大值。
    • setMessage(CharSequence message):设置对话框里显示的消息。
    • setProgress(int value):设置对话框里进度条的进度值。
    • setProgressStyle(int style):设置对话框里进度条的风格。

       下面程序的界面也很简单,界面上只有三个简单的按钮,当用户单击不同按钮时系统将会启动不同的进度对话框。其中第三个按钮激发的进度对话框比较复杂,该对话框使用填充数组来模拟耗时任务,随着任务的进行不断更新进度对话框上进度的显示。

       

    <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:onClick="showIndeterminate"
            android:text="不显示的进度条"/>
        <Button android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:onClick="showpProgress"
            android:text="显示进度的进度条"/>
    </LinearLayout>

    后台Activity代码文件如下:
     

    package org.crazyit.helloworld;
    
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.app.Activity;
    import android.app.ProgressDialog;
    import android.view.Menu;
    import android.view.View;
    
    public class ProgressDialogTest extends Activity {
    
        final static int MAX_PROGRESS=100;
        //改程序模拟填充长度为100的数组
        private int[] data=new int[100];
        //记录进度对话框的完成百分比
        int progressStatus=0;
        int hasData=0;
        ProgressDialog pd1,pd2;
        //定义一个负责更新的进度的Handler
        Handler  handler=new Handler()
        {
            public void handleMessage(Message msg)
            {
                //表明消息是由该程序发送的
                if(msg.what==0x123)
                {
                    pd2.setProgress(progressStatus);
                }
            }
            
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.progress_dialog_test);
        }
    
        public void showSpinner(View source)
        {
            ProgressDialog.show(this, "任务执行中", "任务执行中,请等待",false,true);  //①      
        }
        
        public void showIndeterminate(View source)
        {
            pd1=new ProgressDialog(ProgressDialogTest.this);
            //设置对话框的标题
            pd1.setTitle("任务正在执行中");
            //设置对话框显示的内容
            pd1.setMessage("任务正在执行中,敬请等待...");
            //设置对话框能用“取消”按钮关闭
            pd1.setCancelable(true);
            //设置对话框的进度条风格
            pd1.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            //设置对话框的进度条是否显示进度
            pd1.setIndeterminate(true);
            pd1.show();  //②
         }
        
        public void showpProgress(View source)
        {
            //将进度条的完成进度设为0
            progressStatus=0;
            //重新开始填充数组
            hasData=0;
            pd2=new ProgressDialog(ProgressDialogTest.this);
            pd2.setMax(MAX_PROGRESS);
            //设置对画框的标题
            pd2.setTitle("任务完成百分比");
            //设置对话框显示的内容
            pd2.setMessage("耗时任务的完成百分比");
            //设置不能用“取消”按钮关闭
            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;
            
        }
        
        
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.progress_dialog_test, menu);
            return true;
        }
    
    }

         上面程序为三个按钮定义了事件处理方法,其中一个按钮的事件处理方法调用了ProgressDialog的静态show()方法创建并显示对话框,如上面①号粗体字代码所示,这也是使用对话框的最简单的方式;第二个按钮的事件处理方法先创建了ProgressDialog对象,再调用该对话框的show()方法将它显示出来,如上面的②号粗体字代码所示;第三个按钮的事件处理方法也先创建ProgressDialog对象,并设置对话框的相关属性,再调用show()方法将它显示出来。
      运行上面的程序出现如下所示界面效果:

      

  • 相关阅读:
    DPDK安装方法 17.12.13
    numa.h:No such file or directory 解决方法
    17秋 软件工程 第六次作业 Beta冲刺 Scrum3
    17秋 软件工程 第六次作业 Beta冲刺 总结博客
    17秋 软件工程 第六次作业 Beta冲刺 Scrum2
    Paper Reviews and Presentations
    17秋 软件工程 第六次作业 Beta冲刺 Scrum1
    17秋 软件工程 第六次作业 Beta冲刺
    error: could not create '/System/Library/Frameworks/Python.framework/Versions/2.7/share': Operation not permitted
    17秋 软件工程 个人作业 软件产品案例分析
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3394691.html
Copyright © 2011-2022 走看看