• 使用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()方法将它显示出来。
      运行上面的程序出现如下所示界面效果:

      

  • 相关阅读:
    爬取动态html网页,requests+execjs
    pycharm2019.2一个奇怪的bugger,执行后输出内容被莫名处理
    博客园啥时候升级了,刚看到
    在浏览器的市场上,IE依然是放弃了,firefox还在继续~~
    jetbrain rider 逐渐完美了,微软要哭了么?
    div层的滑入滑出实例
    关于js的<、>、=、<=、>=的比较
    Jquery实现左右轮播效果
    Html5离线缓存详细讲解
    CANVAS画布与SVG的区别
  • 原文地址:https://www.cnblogs.com/wolipengbo/p/3394691.html
Copyright © 2020-2023  润新知