当前位置: 首页 > article >正文

Android常用界面控件——ProgressBar

ProgressBar

目录

ProgressBar

在XML中定义ProgressBar

ProgressBar风格样式

ProgressBar常用XML属性

在Java代码中控制ProgressBar

实例 


什么是ProgressBar?

ProgressBar是Android中的一个视图控件,主要用于表示一个任务的进度情况,比如文件下载的进度、音乐播放的进度等。它通常以水平条或圆圈的形式展示,允许用户了解任务的当前状态和进度百分比。

如何在Android中使用ProgressBar?

在Android中,可以通过XML布局文件或者Java代码来创建和配置ProgressBar。

在XML中定义ProgressBar

<ProgressBar
   android:id="@+id/progressBar"                        
   android:layout_width="wrap_content"                  
   android:layout_height="wrap_content"
   style="@android:style/Widget.ProgressBar.Horizontal" 
   android:max="100"                                    
   android:progress="0" />                              
  • android:id: 设置ProgressBar的唯一标识符。
  • android:layout_widthandroid:layout_height: 设置ProgressBar的宽度和高度。
  • style="?android:attr/progressBarStyleHorizontal": 设置ProgressBar的样式为水平进度条。
  • android:max: 设置ProgressBar的最大值。
  • android:progress: 设置ProgressBar的当前进度值。

ProgressBar风格样式

Android支持多种风格的进度条,通过style属性可以为ProgressBar指定风格。该属性可支持如下几个属性值:

@android:style/Widget.ProgressBar.Horizontal:水平进度条。

@android:style/Widget.ProgressBar.Inverse:普通大小的环形进度条。

@android:style/Widget.ProgressBar.Large:大环形进度条。

@android:style/Widget.ProgressBar.Large.Inverse:大环形进度条。

@android:style/Widget.ProgressBar.Small:小环形进度条。

@android:style/Widget.ProgressBar.Small.Inverse:小环形进度条。

在Android开发中,ProgressBar的样式设定有两种方式,另一种可以通过如下方式使用:

?android:attr/progressBarStyle

?android:attr/progressBarStyleHorizontal

?android:attr/progressBarStyleInverse

?android:attr/progressBarStyleLarge

?android:attr/progressBarStyleLargeInverse

?android:attr/progressBarStyleSmall

?android:attr/progressBarStyleSmallInverse

?android:attr/progressBarStyleSmallTitle

ProgressBar常用XML属性

android:max:进度条的最大值
android:progress:进度条已完成进度值
android:progressDrawable:设置轨道对应的Drawable对象
android:indeterminate:如果设置成true,则进度条不精确显示进度
android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象
android:indeterminateDuration:设置不精确显示进度的持续时间
android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!

在Java代码中控制ProgressBar

然后,在Activity或Fragment的Java代码中,可以通过findViewById方法获取ProgressBar的实例,并根据需要更新其进度:

public class MainActivity extends AppCompatActivity {
    private ProgressBar progressBar;
    private ProgressBar progressBar2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        progressBar=findViewById((R.id.pb));
        progressBar2=findViewById((R.id.pb2));
    }
    public void leoClick(View view){
        if(progressBar.getVisibility()==view.GONE){
            progressBar.setVisibility((View.VISIBLE));
        }else{
            progressBar.setVisibility(View.GONE);
        }
    }
    public void load(View view){
        int progress = progressBar2.getProgress();
        progress+=10;
        progressBar2.setProgress(progress);
    }
}
  • ProgressBar progressBar = findViewById();: 通过findViewById方法获取ProgressBar的实例。
  • progressBar.setProgress();: 在UI线程中更新ProgressBar的当前进度。如果ProgressBar是水平的,进度值是一个0到100的整数;如果是圆形的,进度值是一个0到10000的整数。
  • setVisibility();:控制ProgressBar的显示与隐藏。

需要注意的是,如果进度是由一个任务的执行进度决定的,为了避免UI线程阻塞,应该将该任务放在子线程中执行,然后使用runOnUiThread()方法在UI线程中更新ProgressBar的进度。

实例 

自定义控件,要求有模糊模式(圆形)的多种样式;模糊模式(水平)且点击按钮进度条消失;精确模式(水平)且点击按钮进度条进度增加10%;精确模式(水平)且进度条进度为18%。

XML代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

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

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

    <ProgressBar
        android:id="@+id/pb"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="300dp"
        android:layout_height="wrap_content" />

    <Button
        android:text="显示隐藏进度条"
        android:onClick="leoClick"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <ProgressBar
        android:id="@+id/pb2"
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_width="300dp"
        android:layout_height="wrap_content" />

    <Button
        android:text="模拟下载"
        android:onClick="load"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ProgressBar
        style="?android:attr/progressBarStyleHorizontal"
        android:max="100"
        android:layout_width="300dp"
        android:indeterminate="true"
        android:layout_height="wrap_content" />

     <ProgressBar
        style="@android:style/Widget.ProgressBar.Horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="18" />


</LinearLayout>

JAVA代码

package com.example.myprogressbar;

import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {
    private ProgressBar progressBar;
    private ProgressBar progressBar2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });

        progressBar=findViewById((R.id.pb));
        progressBar2=findViewById((R.id.pb2));
    }
    public void leoClick(View view){
        if(progressBar.getVisibility()==view.GONE){
            progressBar.setVisibility((View.VISIBLE));
        }else{
            progressBar.setVisibility(View.GONE);
        }
    }
    public void load(View view){
        int progress = progressBar2.getProgress();
        progress+=10;
        progressBar2.setProgress(progress);
    }
}

 运行截图

                   

                                              (点击按钮隐藏/显示进度条)       (点击按钮增加进度)


http://www.kler.cn/a/350120.html

相关文章:

  • 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑
  • STM32-CAN总线
  • 数据结构——算法基础
  • 构建高效稳定的网络环境
  • 网络安全等级保护基本要求——等保二级
  • Spring MVC和Spring WebFlux的区别
  • PHP实现TOTP: Time-Based One-Time Password Algorithm
  • JAVA 中的克隆对象
  • 强化学习和QLearning及GAN到底是什么关系啊
  • SpringSecurity(一)——认证实现
  • 一区大黄蜂!人工蜂群算法优化!ABC-CNN-LSTM-MATT多特征分类预测
  • Jackson在Spring Boot中的开发技巧详解
  • 在顺序结构和链式结构的线性表上实现顺序检索算法
  • Ascend C算子编程和C++基础 Lesson3-4 性能优化
  • 流程图
  • Angular 实现 keep-alive (路由复用)
  • 鸿蒙应用,如何保存用户的 token
  • 【.net core使用minio大文件分片上传】.net core使用minio大文件分片上传以及断点续传、秒传思路
  • 构建可扩展的高校学科竞赛平台:SpringBoot案例分析
  • 2.2.ReactOS系统KSERVICE_TABLE_DESCRIPTOR结构体的声明
  • 基于Spring Boot REST API设计指南
  • 控制Stable Diffusion生成质量的多种方法
  • 水库大坝安全监测预警系统守护大坝安全卫士
  • 余 弦 曲 线
  • FineReport 动态列切换统计维度
  • 【大数据应用开发】2023年全国职业院校技能大赛赛题第10套