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

老生常谈ProgressBar、ProgessDialog的用法

程序员文章站 2022-05-28 10:21:50
一、progressbar 1. 常用类型 1.1 不确定式圆形进度条 style="@android:style/widget.holo.light.pro...

一、progressbar

1. 常用类型

1.1 不确定式圆形进度条

style="@android:style/widget.holo.light.progressbar"
style="@android:style/widget.devicedefault.light.progressbar.large"
...

没有显示进度,可作为过场动画。有大、中、小三种大小,默认为中。

1.2 条形进度条

style="@android:style/widget.progressbar.horizontal"
style="@android:style/widget.devicedefault.light.progressbar.horizontal"
...

带有显示进度。

1.3 标题栏不确定式进度条

requestwindowfeature(window.feature_indeterminate_progress);
setprogressbarindeterminatevisibility(true);

在标题栏右侧显示的无显示进度的圆形进度条。

1.4 标题栏条形进度条

requestwindowfeature(window.feature_progress);
setprogressbarvisibility(true);

在标题栏顶部显示的条形进度条,可通过setprogess(int)设置当前进度,最大值为10000。

2. 常用控件属性

<!--最大显示进度-->
android:max
<!--第一显示进度-->
android:progress
<!--第二显示进度-->
android:secondaryprogress
<!--置是否精确显示;true为不精确,false为精确-->
android:indeterminate
<!--加载自定义样式-->
android:progressdrawable

3. 自定义样式

通过控件的android:progressdrawable属性引用自定义的drawable文件实现。一般需定义三个内容:背景、第一进度、第二进度。

范例:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

  <!--背景样式-->
  <item android:id="@android:id/background">
    <shape>
      <!--圆角-->
      <corners android:radius="10dip" />
      <!--填充色-->
      <solid android:color="#dddddd" />
    </shape>
  </item>

  <!--第二进度样式-->
  <item android:id="@android:id/secondaryprogress">
    <clip>
      <shape>
        <corners android:radius="10dip" />
        <solid android:color="#78bb78" />
      </shape>
    </clip>
  </item>

  <!--第一进度样式-->
  <item android:id="@android:id/progress">
    <clip>
      <shape>
        <corners android:radius="10dip" />
        <solid android:color="#55bb55" />
      </shape>
    </clip>
  </item>

</layer-list>

贴张效果图:

老生常谈ProgressBar、ProgessDialog的用法

4. 关键方法

//设置第一进度
setprogress(int)
//设置第二进度
setsecondaryprogress(int)
//获取第一进度
getprogress()
//获取第二进度
getsecondaryprogress()
//增加或减少第一进度
incrementprogressby(int)
//增加或减少第二进度
incrementsecondaryprogressby(int)
//获取进度最大值
getmax()

5. 范例

布局比较简单,线性布局,竖直排列,这里就不贴代码了,直接贴张图:

老生常谈ProgressBar、ProgessDialog的用法

java:

public class progessbaractivity extends activity implements view.onclicklistener{

  private progressbar progressbar;
  private textview text;
  private button addfirst;
  private button addsecond;
  private button subfirst;
  private button subsecond;
  private button reset;
  private int first;
  private int second;
  private int max;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_progess_bar);

    init();

  }

  private void init() {
    progressbar = (progressbar) findviewbyid(r.id.progress_bar);
    text = (textview) findviewbyid(r.id.text);
    addfirst = (button) findviewbyid(r.id.add_first);
    subfirst = (button) findviewbyid(r.id.sub_first);
    addsecond = (button) findviewbyid(r.id.add_second);
    subsecond = (button) findviewbyid(r.id.sub_second);
    reset = (button) findviewbyid(r.id.reset);

    //获取第一、第二、最大进度
    first = progressbar.getprogress();
    second = progressbar.getsecondaryprogress();
    max = progressbar.getmax();

    addfirst.setonclicklistener(this);
    addsecond.setonclicklistener(this);
    subfirst.setonclicklistener(this);
    subsecond.setonclicklistener(this);
    reset.setonclicklistener(this);
  }

  @override
  public void onclick(view v) {
    switch (v.getid()) {
      case r.id.add_first:
        //第一进度加10
        progressbar.incrementprogressby(10);
        break;
      case r.id.add_second:
        //第二进度加10
        progressbar.incrementsecondaryprogressby(10);
        break;
      case r.id.sub_first:
        progressbar.incrementprogressby(-10);
        break;
      case r.id.sub_second:
        progressbar.incrementsecondaryprogressby(-10);
        break;
      case r.id.reset:
        //重置为初始数值
        progressbar.setprogress(30);
        progressbar.setsecondaryprogress(60);
        break;
    }
    //更新文本内容
    text.settext("第一进度为" + (int) (1.0*first/max*100) + "%,第二进度为" + (int) (1.0*second/max*100) + "%");
  }
}

二、progressdialog

1. 构造函数

progressdialog(context context)
progressdialog(context context, int theme)//theme为对话框样式

2. 关键方法

//设置进度条样式
setprogressstyle(int style)
//设置对话框标题
settitle(string title)
//设置对话框本文信息
setmessage(charsequence message)
//设置对话框图标
seticon(drawable d)
//设置按钮,whichbutton为按钮类型,text为按钮名称,listener为监听器
setbutton(int whichbutton, charsequence text, onclicklistener listener)
//显示对话框
show()

此外,除了这几个方法,progressdialog也可使用上面progressbar中介绍的方法。

3. 范例

public class progressdialogactivity extends activity {

  private progressdialog prodialog;

  @override
  protected void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.activity_progress_dialog);

    findviewbyid(r.id.show).setonclicklistener(new view.onclicklistener() {
      @override
      public void onclick(view v) {
        //新建对话框
        prodialog = new progressdialog(progressdialogactivity.this);
        //设置进度条样式
        prodialog.setprogressstyle(progressdialog.style_horizontal);
        //设置对话框标题
        prodialog.settitle("初识progressdialog");
        //设置提示对话框文本
        prodialog.setmessage("好好学习,天天向上!");
        //设置对话框显示图标
        prodialog.seticon(r.drawable.ic_launcher);
        //设置进度条最大进度,默认为10000
        prodialog.setmax(100);
        //设置初始第一进度
        prodialog.incrementprogressby(30);
        //设定取消按钮
        prodialog.setbutton(dialoginterface.button_positive, "取消", new dialoginterface.onclicklistener() {
          @override
          public void onclick(dialoginterface dialog, int which) {
            dialog.cancel();
          }
        });
        //显示对话框
        prodialog.show();
      }
    });
  }
}

以上这篇老生常谈progressbar、progessdialog的用法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。