安卓学习————安卓控件之ProgressBar

ProgressBar

  ProgressBar,进度条,是AndroidUI界面中一个非常实用的组件,通常用于向用户显示某个耗时操作完成的百分比。因此它需要动态的显示进度,从而避免长时间的执行某个耗时的操作,而让用户感觉程序失去了相应,从而提高界面的友好性。

  从官方文档上看,为了适应不同的应用环境,Android内置了几种风格的进度条,可以通过Style属性设置ProgressBar的风格。支持如下属性,后面在示例中会一一展示:

  • @android:style/Widget.ProgressBar.Horizontal:水平进度条(可以显示刻度,常用)。
  • @android:style/Widget.ProgressBar.Small:小进度条。
  • @android:style/Widget.ProgressBar.Large:大进度条。
  • @android:style/Widget.ProgressBar.Inverse:不断跳跃、旋转画面的进度条。
  • @android:style/Widget.ProgressBar.Large.Inverse:不断跳跃、旋转动画的大进度条。
  • @android:style/Widget.ProgressBar.Small.Inverse:不断跳跃、旋转动画的小进度条。

  只有Widget.ProgressBar.Horizontal风格的进度条,才可以设置进度的递增,其他的风格展示为一个循环的动画,而设置Widget.ProgressBar.Horizontal风格的进度条,需要用到一些属性设置递增的进度,这些属性都有对应的setter、getter方法,这些属性如下:

  • android:max:设置进度的最大值。
  • android:progress:设置当前第一进度值。
  • android:secondaryProgress:设置当前第二进度值。
  • android:visibility:设置是否显示,默认显示。

   对于Widget.ProgressBar.Horizontal风格的进度条而言,在代码中动态设置移动量,除了可以使用setProgress(int)方法外,Android还为我们提供了另外一个incrementProgressBy(int)方法,它与setProgress(int)的根本区别在于,setProgress(int)是直接设置当前进度值,而incrementProgressBy(int)是设置当前进度值的增量(正数为增,负数为减)。与setProgress(int)和incrementProgressBy(int)对应的还有setSecondaryProgress(int)和incrementSecondaryProgressBy(int)方法,用于设置第二进度值。

 

以下是xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >"

<TextView android:id="@+id/textviewHor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Widget.Progressbar.Horizontal"/>

<ProgressBar
android:id="@+id/progessbarHor"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"
android:progress="20"
android:secondaryProgress="40"
android:visibility="visible"/>

<TextView android:id="@+id/textviewSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Widget.Progressbar.Small"/>

<ProgressBar android:id="@+id/progressbarSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"/>

<TextView android:id="@+id/textviewLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Widget.Progressbar.Large"/>

<ProgressBar android:id="@+id/progressbarLarge"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>

<TextView android:id="@+id/textviewInverse"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Widget.Progressbar.Inverse"/>

<ProgressBar android:id="@+id/progressbarInverse"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Inverse"/>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">

<Button android:id="@+id/buttonAdd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+"/>

<Button android:id="@+id/buttonRdc"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:text="-"/>

<Button android:id="@+id/buttonVsb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:text="Visible"/>

</LinearLayout>

</LinearLayout>

 

以下是代码:

package com.example.widget;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;

public class MainActivity extends Activity {

  private ProgressBar pbHor, pbLarge; //声明进度条控件
  private Button btAdd, btReduce, btVisible; //声明按钮控件

  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_progessbar);

  //获得控件
  pbHor = (ProgressBar)findViewById(R.id.progessbarHor);
  pbLarge = (ProgressBar)findViewById(R.id.progressbarLarge);
  btAdd = (Button)findViewById(R.id.buttonAdd);
  btReduce = (Button)findViewById(R.id.buttonRdc);
  btVisible = (Button)findViewById(R.id.buttonVsb);

  //点击消失ProgressBar.Large控件
  btVisible.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
      if(pbLarge.getVisibility() == View.VISIBLE) {
        pbLarge.setVisibility(View.GONE);
      } else {
        pbLarge.setVisibility(View.VISIBLE);
      }
    }
  });

  //点击增加或减少Horizontal进度
  Button.OnClickListener buttonListener = new Button.OnClickListener() {

  public void onClick(View v) {
    switch(v.getId()) {
      case R.id.buttonAdd :
        if(pbHor.getProgress() < 90) {
          pbHor.setProgress((int) (pbHor.getProgress() * 1.2));
        }
        if(pbHor.getProgress() < 100) {
          pbHor.setSecondaryProgress((int) (pbHor.getProgress() * 1.2));
        }
        break;

      case R.id.buttonRdc:
        if(pbHor.getProgress() > 10) {
          pbHor.setProgress((int) (pbHor.getProgress() / 1.2));
        }
        if(pbHor.getProgress() > 20) {
          pbHor.setSecondaryProgress((int) (pbHor.getProgress() / 1.2));
        }
        break;
      }
    }
  };

  btAdd.setOnClickListener(buttonListener);
  btReduce.setOnClickListener(buttonListener);
}

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
  }

}技术分享

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。