1、简介
ProgressBar 是进度条组件,通常用于向用户展示某个耗时操作完成的进度,而不让用户感觉是程序失去了响应,从而更好地提升用户界面的友好性。
就像我现在进行的 apk 下载的任务,它都是通过进度条通知用户下载的进度,如果没有了这个进度条,不能实时地呈现下载进度的话,用户就会想是不是程序失去响应,而要下载的文件比较大的话,用户肯定会想知道下载到了什么地方,什么时候会完成,有了进度条都可以打消用户的这些疑虑。
2、显示样式
用 Style 属性来给 ProgressBar 确定样式,有两种方式,第一种就是 API文档中说明的方式:
- Widget.ProgressBar.Horizontal
- Widget.ProgressBar.Small
- Widget.ProgressBar.Large
- Widget.ProgressBar.Inverse
- Widget.ProgressBar.Small.Inverse
- Widget.ProgressBar.Large.Inverse
设置的方式如下:
style="@android:style/Widget.ProgressBar.Horizontal"
第二种就是使用系统的attr,下面的方式是系统的style:
- style=”?android:attr/progressBarStyle”
- style=”?android:attr/progressBarStyleHorizontal”
- style=”?android:attr/progressBarStyleInverse”
- style=”?android:attr/progressBarStyleLarge”
- style=”?android:attr/progressBarStyleLargeInverse”
- style=”?android:attr/progressBarStyleSmall”
- style=”?android:attr/progressBarStyleSmallInverse”
- style=”?android:attr/progressBarStyleSmallTitle”
style="?android:attr/progressBarStyleHorizontal"
style="@android:style/Widget.ProgressBar.Horizontal"
这两种都能实现水平ProgressBar样式,但效果并不一样。
我们可以通过你的SDK目录下…\platforms\android-25\data\res\values\styles.xml 查看系统的样式源码。如果是使用Android Studio的朋友就不需要这样了,可以Ctrl + 左键进入指定样式的源码。
系统自带的样式中最常用的就是以下三种了,分别代表小环形进度条,大环形进度条,水平进度条。这里并没有中型环形进度条,因为如果不设置 style 属性或者设置为 progressBarStyle 就显示为中等大小。
- style=”?android:attr/progressBarStyleSmall”
- style=”?android:attr/progressBarStyleLarge”
- style=”?android:attr/progressBarStyleHorizontal”
3、ProgressBar分类
ProgressBar分为精确的和不精确的:
- 精确的是我们能明确看到进度(可以显示刻度或者百分比)
- 不精确的就是不确定一个操作需要多长时间来完成,这个时候就需要用的就是不精确的ProgressBar了,比如过场动画,刷新进度。
android:indeterminate 就是关于设置不精确的属性,因为 indeterminate 是不明确的意思,所以如果设置为true的话,滚动条的当前值会自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段。主要是在进行一些无法确定操作时间的任务时作为提示。而设置为 false 就是根据我们的进度可以设置现在的进度值。
设置为true时,ProgressBar可能是圆形的滚动条或者水平的滚动条(由样式决定),但是我们一般时候,是直接使用Style类型来区分圆形还是水平ProgressBar的。
我们不仅可以在面板中显示不同风格的 ProgressBar,也可以在标题栏上设置,接下来就通过一个小案例来说明如何显示精确与不精确的两种 ProgressBar:
public class ProgressBar extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 启用窗口特征,启用带进度和不带进度的进度条
requestWindowFeature(Window.FEATURE_PROGRESS);
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
setContentView(R.layout.activity_progress_bar);
// 显示两种进度条
setProgressBarVisibility(true);
setProgressBarIndeterminateVisibility(true);
// Max=10000