4.8 ProgressBar进度条
- 常用属性
android:max | 进度条的最大值 |
android:progress | 进度条已完成进度值 |
android:progressDrawable | 设置轨道对应的Drawable对象 |
android:indeterminate | 如果设置成true,则进度条不精确显示进度 |
android:indeterminateDrawable | 设置不显示进度的进度条的Drawable对象 |
android:indeterminateDuration | 设置不精确显示进度的持续时间 |
android:secondaryProgress | 二级进度条,类似于视频播放的一条是当前播放进度,一条是 缓冲进度,前者通过progress属性进行设置 |
- 对应的再Java中我们可调用下述方法:
getMax() | 返回这个进度条的范围的上限 |
getProgress() | 返回进度 |
getSecondaryProgress() | 返回次要进度 |
incrementProgressBy(int diff) | 指定增加的进度 |
isIndeterminate() | 指示进度条是否在不确定模式下 |
setIndeterminate(Boolean indeterminate) | 设置不确定模式下 |
- 设置ProgressBar的样式,不同的样式会有不同的形状和模式:
Widget.ProgressBar.Horizontal | 横向进度条(精确模式或模糊模式,这取决于Android:indeterminate) |
Widget.ProgressBar | 中号的圆形进度条(模糊模式) |
Widget.ProgressBar.Small | 小号的圆形进度条(模糊模式) |
Widget.ProgressBar.Large | 大号的圆形进度条(模糊模式) |
Widget.ProgressBar.Inverse | 中号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色) |
Widget.ProgressBar.Small.Inverse | 小号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色) |
Widget.ProgressBar.Large.Inverse | 大号的圆形进度条(模糊模式),该样式适用于亮色背景(例如白色) |
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<!-- 系统提供的圆形进度条,fenw小、中、大-->
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Small"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Large"/>
<!-- 系统提供的水平进度条,分为模糊和不模糊-->
<ProgressBar
android:id="@+id/pb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@android:style/Widget.ProgressBar.Horizontal"
android:max="100"
android:progress="18"/>
<ProgressBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:indeterminate="true" //不精确显示进度
style="@android:style/Widget.ProgressBar.Horizontal"/>
</LinearLayout>
- 模拟进度条更新:
ProgressBarActivity .java:
package com.example.myapplication;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
public class ProgressBarActivity extends AppCompatActivity {
private int currentProgress = 0;//当前进度值
private ProgressBar progressBar;
private int maxProgress; //最大进度值
private Handler mHandler = new Handler(){
@Override
public void handleMessage(@NonNull Message msg){
super.handleMessage(msg);
switch (msg.what){
case 0:
progressBar.setProgress(currentProgress);
break;
}
}
};
@Override
protected void onCreate(@Nullable Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.progress_bar);
progressBar = findViewById(R.id.pb);
maxProgress = progressBar.getMax();
}
@Override
protected void onStart(){
super.onStart();
//启动线程模拟加载
new Thread(){
@Override
public void run() {
while (true) {
try {
for (int i = 0; i < 100; i++) {
Thread.sleep(1000);
currentProgress += 10;
if (currentProgress > maxProgress) {
break;
}
mHandler.sendEmptyMessage(0);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
启动测试: