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();
- }
- }
启动测试:
