安卓系统中的进度条主要有圆形和水平两种,安卓系统默认进度条是圆形进度条,如图1所示。
图1 圆形进度条与水平进度条
使用ProgressBar类表示进度条。
1 圆形进度条
1.1 创建圆形进度条
圆形进度条主要包括大、正常和小三种类型,可以通过style属性进行设置。
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="?android:attr/progressBarStyleLarge"
android:id="@+id/progressBarLarge"/>
以上代码的作用是定义了一个大的圆形进度条;小的圆形进度条style的值是
style="?android:attr/progressBarStyleSmall"
正如之前提到的,如果不设置style的值,则该进度条默认为圆形正常进度条。大、正常和小的圆形进度条如图1所示。
1.2 ?android:attr与@android:style区别
在“1.1 创建圆形进度条”中提到了通过将style属性设置成“?android:attr/XXX”格式的值来设置进度条类型的方法。除了该方法之外,还可以将style的值设置为如下类型
style="@android:style/Widget.ProgressBar.Small"
style="@android:style/Widget.ProgressBar.Large"
style="@android:style/Widget.ProgressBar"
以上代码分别将进度条设置为小、正常和大的圆形进度条。
以上两种方法的区别在于:使用“@android:style”设置style属性时,控件的style属性不会随系统的主题(Theme)的改变而改变;而使用“?android:attr/”设置style属性时,控件的style属性会随着系统的主题(Theme)的改变而改变。图2是将小的圆形控件的style值指定为“@android:style”格式。
当前的主题(Theme)是粉色,从图2中可以看出,大和普通的圆形进度条的style使用的是“?android:attr/”格式的值,所以其颜色与当前主题颜色一致;而小的圆形进度条的style值使用的是“@android:style”格式,所以其颜色与当前主题无关。
图2 “@android:style”格式的style
2 水平进度条
2.1 创建水平进度条
将进度条的style属性设置为以下值,即可将进度条的类型改为水平
style="?android:attr/progressBarStyleHorizontal"
style="@android:style/Widget.ProgressBar.Horizontal"
2.2 水平进度条的基本属性
除了style属性外,水平进度条还包含以下基本属性
android:max="100"
android:progress="50"
android:secondaryProgress="80"
其中,max表示水平进度条的长度;progress表示水平进度条的当前进度;sencondaryProgress表示水平进度条的第二进度,例如,在线观看视频时,当前进度表示观看视频的进度,而第二进度则表示视频缓冲的进度。图3显示了包含当前进度和第二进度的水平进度条。
图3 水平进度条
2.3 操作水平进度条
通过安卓API可以对进度条控件进行增加/减少当前进度、增加/减少第二进度、设置当前进度、设置第二进度、获取当前进度、获取第二进度以及设置/获取进度条长度等操作。
2.3.1 增加/减少进度
通过incrementProgressBy()和incrementSecondaryProgressBy()两个方法可以实现增加/减少当前进度和第二进度。这两个方法的格式为:
public final void incrementProgressBy(int diff);
public final void incrementSecondaryProgressBy(int diff);
其中,参数diff表示进度条的增量,该增量为正数时表示增加,为负数时表示减少。
2.3.2 设置进度
通过setProgress()和setSecondaryProgress()方法实现设置当前进度和第二进度。
2.3.3 获取进度
通过getProgress()和getSecondaryProgress()方法获取当前进度和第二进度。
public int getProgress();
public int getSecondaryProgress();
返回值即为获取到的进度。
2.3.4 设置/获取进度条长度
通过setMax()方法和getMax()方法设置/获取进度条长度。