欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android ProgressDialog进度条使用详解

程序员文章站 2024-02-23 11:58:40
进度条以一种客观化的方式,让我们知道程序正在执行的情况,在程序需要时间执行任务的时候,提示进度条友好的告诉用户说,当前任务还没有完成,请稍稍等待,进度条经常使用在app下载...

进度条以一种客观化的方式,让我们知道程序正在执行的情况,在程序需要时间执行任务的时候,提示进度条友好的告诉用户说,当前任务还没有完成,请稍稍等待,进度条经常使用在app下载应用、更新应用、加载网络数据中,使用频繁,常见的进度条有progressdialog、progressbar,这里只要介绍progressdialog。
progressdialog读取文件进度解析主要涉及到一个知识:

  • handler消息处理机制,
  • 文件字节流的操作,
  • progressdialog类的使用

1、handler消息处理机制

handler消息处理机制,接收子线程传递过来的消息,根据消息传递值,执行ui界面更新操作,目的防止阻塞主线程,使用最多的是sendemptymessage(int)、sendmessage(int),因为经常需要只要,所以记住第一个handler代码的写法,后面没次都可以复制过来用,如下:

handler handler = new handler() { 
 
    @override 
    public void handlemessage(message msg) { 
      switch (msg.what) { 
      case 110://根据what值,执行ui更新操作 
        progressvalue += msg.arg1; 
        sb.append(msg.obj); 
        mtextview.settext(sb.tostring());//textview显示读取内容 
        mdialog.setprogress(progressvalue);//设置进度条当前值 
        if (progressvalue == 100) {//判读是否读取结束 
           
          mdialog.dismiss(); 
          toast.maketext(mainactivity.this, "读取完成!", toast.length_short).show(); 
        } 
         
        break; 
 
      } 
    } 
 
  }; 

2、文件字节流的操作

输入输出流的内容,看来也不是想象中的那么难,在《java面向对象程序设计》一书中分为:file类、文件字节流、文件字符流、缓冲流、文件对话框、随机流、数组流、数据流带进度条的输入流、对象流,经常会忘记它们对应的类,使用起来容易混乱,下面分别写一个简单例子:

1)、file类

file path = environment.getexternalstoragedirectory();//获取sdcard根路径 
file file = new file(path + "/progressmonitor.txt");//读取根路径下的progressmonitor文件 

2)、文件字节流

private void readfromfile(string path) { 
    fileinputstream fis; 
    datainputstream dis; 
    try { 
      fis = new fileinputstream(path); 
      dis = new datainputstream(fis); 
      byte b[] = new byte[10];// 每次读取10字节 
      while ((readed = dis.read(b)) != -1) { 
        message msg = new message(); 
        string str=new string(b,0,readed); 
        msg.obj=str; 
        msg.arg1 = readed; 
        msg.what = 110; 
        handler.sendmessage(msg); 
        try { 
          thread.sleep(1000); 
        } catch (exception e) { 
 
          e.printstacktrace(); 
        } 
 
      } 
 
    } catch (filenotfoundexception e) { 
 
      e.printstacktrace(); 
    } catch (ioexception e) { 
      e.printstacktrace(); 
    }finally { 
      try { 
        dis.close(); 
        fis.close(); 
      } catch (ioexception e) { 
        // todo auto-generated catch block 
        e.printstacktrace(); 
      } 
    } 
 
  } 

3、progressdialog的使用

progressdialog继承alertdialog,alertdialog继承dialog,常用的属性有:

mdialog.setprogressstyle(progressdialog.style_horizontal);/进度条样式 
mdialog.setmax(100);//进度条最大值 
mdialog.settitle("系统提示");//进度条标题 
mdialog.seticon(r.drawable.ic_launcher);//进度条图标 
mdialog.setmessage("正在读取文件,请稍等。。。");//进度条提示信息 
 
mdialog.setprogress(progressvalue);//进度条当前值 
mdialog.dismiss();//进度条消失 

完整代码:

private static final int style_horizontal = 110; 
private static final int style_spinner = 111; 
private void progressdialogstyle(int id) { 
    switch (id) { 
    case style_spinner: 
      mdialog = new progressdialog(this, progressdialog.style_spinner); 
      break; 
    case style_horizontal: 
      mdialog = new progressdialog(this); 
      mdialog.setprogressstyle(progressdialog.style_horizontal); 
      break; 
 
    default: 
      break; 
    } 
 
    mdialog.setmax(100); 
    mdialog.settitle("系统提示"); 
    mdialog.seticon(r.drawable.ic_launcher); 
    mdialog.setmessage("正在读取文件,请稍等。。。"); 
  } 

progressdialog类可以制作平时常见的进度条效果,如果需要更多进度条式样,可以重写progressdialog提供的方法或者继承alertdialog自定义样式。

以上就是本文的全部内容,希望对大家的学习有所帮助。