Android常用界面控件——ProgressBar

ops/2024/10/19 23:11:10/

ProgressBar

目录

ProgressBar

在XML中定义ProgressBar

ProgressBar风格样式

ProgressBar常用XML属性

在Java代码中控制ProgressBar

实例 


什么是ProgressBar?

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

如何在Android中使用ProgressBar?

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

在XML中定义ProgressBar

<ProgressBarandroid: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;@Overrideprotected 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"><ProgressBarstyle="@android:style/Widget.ProgressBar.Small"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ProgressBarstyle="@android:style/Widget.ProgressBar.Large"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ProgressBarandroid:id="@+id/pb"style="?android:attr/progressBarStyleHorizontal"android:layout_width="300dp"android:layout_height="wrap_content" /><Buttonandroid:text="显示隐藏进度条"android:onClick="leoClick"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ProgressBarandroid:id="@+id/pb2"style="?android:attr/progressBarStyleHorizontal"android:max="100"android:layout_width="300dp"android:layout_height="wrap_content" /><Buttonandroid:text="模拟下载"android:onClick="load"android:layout_width="wrap_content"android:layout_height="wrap_content" /><ProgressBarstyle="?android:attr/progressBarStyleHorizontal"android:max="100"android:layout_width="300dp"android:indeterminate="true"android:layout_height="wrap_content" /><ProgressBarstyle="@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;@Overrideprotected 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.ppmy.cn/ops/126824.html

相关文章

【java】Springboot框架增加日志功能,使用log4j和Logback实现日志功能

【java】Springboot框架增加日志功能,使用log4j和Logback实现日志功能 参考文章1:深入了解Java日志框架:SLF4J和Logback 参考文章2:日志框架简介-Slf4j+Logback入门实践 我的系统是 Springboot+Maven 简述 Logback是log4j框架的升级版,是一个可靠且高效的日志框架,内置在…

外包干了3周,技术退步太明显了。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;21年通过校招进入武汉某软件公司&#xff0c;干了差不多3个星期的功能测试&#xff0c;那年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我才在一个外包企业干了3周的功…

关于 GLFW、SDL2、Win32、GLUT 和 macOS(OSX)平台的介绍

GLFW 介绍&#xff1a; GLFW 是一个轻量级的、开源的库&#xff0c;用于在多种操作系统上创建和管理 OpenGL、OpenGL ES 和 Vulkan 窗口。它提供了创建窗口、上下文、接收输入和事件处理的基本功能。 应用&#xff1a; 游戏开发&#xff1a;GLFW 常用于开发游戏&#xff0c;…

Chromium 中chrome.contextMenus扩展接口实现分析c++

一、chrome.contextMenus 使用 chrome.contextMenus API 向 Google Chrome 的上下文菜单中添加项。您可以选择从右键菜单中添加的对象类型&#xff0c;例如图片、超链接和页面。 权限 contextMenus 您必须在扩展程序的清单中声明 "contextMenus" 权限&#xff0c…

Redis相关面试题

Redis 为什么快? 1.纯内存KV操作 Redis 的操作都是基于内存的,CPU不是 Redis性能瓶颈,,Redis的瓶颈是机器内存和网 络带宽。 在计算机的世界中,CPU的速度是远大于内存的速度的,同时内存的速度也是远大于硬 盘的速度。redis的操作都是基于内存的,绝大部分请求是纯粹的内存…

cordova的使用

环境 Cordova 是一个跨平台的开发框架&#xff0c;它允许开发者使用 HTML、CSS 和 JavaScript 创建移动应用。Cordova 的不同版本可能会有不同的环境要求。以下是 Cordova 10 和 Cordova 12 在开发 Android 和 iOS 应用时的环境要求的对比总结。 1. Cordova 10 环境要求 And…

MongoDB聚合管道(Aggregation Pipeline)

聚合管道&#xff08;Aggregation Pipeline&#xff09;是MongoDB中用于对数据进行处理和分析的一种强大机制。它由一系列的阶段&#xff08;Stage&#xff09;组成&#xff0c;每个阶段对输入的数据进行一种特定的操作&#xff0c;然后将结果传递给下一个阶段&#xff0c;就像…

Python编程探索:从基础语法到循环结构实践(下)

文章目录 前言&#x1f377;四、 字符串拼接&#xff1a;连接多个字符串&#x1f378;4.1 使用 操作符进行字符串拼接&#x1f378;4.2 使用 join() 方法进行字符串拼接&#x1f378;4.3 使用 format() 方法进行格式化拼接&#x1f378;4.4 使用 f-string&#xff08;格式化字…