Android常用界面控件——ProgressBar

打印 上一主题 下一主题

主题 805|帖子 805|积分 2425

ProgressBar


目录
ProgressBar
在XML中界说ProgressBar
ProgressBar风格样式
ProgressBar常用XML属性
在Java代码中控制ProgressBar
实例 


什么是ProgressBar?
ProgressBar是Android中的一个视图控件,主要用于表示一个任务的进度环境,比如文件下载的进度、音乐播放的进度等。它通常以水平条或圆圈的形式展示,允许用户相识任务的当前状态和进度百分比。
如安在Android中使用ProgressBar?
在Android中,可以通过XML布局文件或者Java代码来创建和设置ProgressBar。

在XML中界说ProgressBar

  1. <ProgressBar
  2.    android:id="@+id/progressBar"                        
  3.    android:layout_width="wrap_content"                  
  4.    android:layout_height="wrap_content"
  5.    style="@android:style/Widget.ProgressBar.Horizontal"
  6.    android:max="100"                                    
  7.    android:progress="0" />                              
复制代码


  • android:id: 设置ProgressBar的唯一标识符。
  • android:layout_width和android:layout_height: 设置ProgressBar的宽度和高度。
  • style="?android:attr/progressBarStyleHorizontal": 设置ProgressBar的样式为水平进度条。
  • android:max: 设置ProgressBar的最大值。
  • android:progress: 设置ProgressBar的当进步度值。
ProgressBar风格样式

Android支持多种风格的进度条,通过style属性可以为ProgressBar指定风格。该属性可支持如下几个属性值:
  1. @android:style/Widget.ProgressBar.Horizontal:水平进度条。
  2. @android:style/Widget.ProgressBar.Inverse:普通大小的环形进度条。
  3. @android:style/Widget.ProgressBar.Large:大环形进度条。
  4. @android:style/Widget.ProgressBar.Large.Inverse:大环形进度条。
  5. @android:style/Widget.ProgressBar.Small:小环形进度条。
  6. @android:style/Widget.ProgressBar.Small.Inverse:小环形进度条。
复制代码
在Android开发中,ProgressBar的样式设定有两种方式,另一种可以通过如下方式使用:
  1. ?android:attr/progressBarStyle
  2. ?android:attr/progressBarStyleHorizontal
  3. ?android:attr/progressBarStyleInverse
  4. ?android:attr/progressBarStyleLarge
  5. ?android:attr/progressBarStyleLargeInverse
  6. ?android:attr/progressBarStyleSmall
  7. ?android:attr/progressBarStyleSmallInverse
  8. ?android:attr/progressBarStyleSmallTitle
复制代码
ProgressBar常用XML属性

  1. android:max:进度条的最大值
  2. android:progress:进度条已完成进度值
  3. android:progressDrawable:设置轨道对应的Drawable对象
  4. android:indeterminate:如果设置成true,则进度条不精确显示进度
  5. android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象
  6. android:indeterminateDuration:设置不精确显示进度的持续时间
  7. android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!
复制代码
在Java代码中控制ProgressBar

然后,在Activity或Fragment的Java代码中,可以通过findViewById方法获取ProgressBar的实例,并根据需要更新其进度:
  1. public class MainActivity extends AppCompatActivity {
  2.     private ProgressBar progressBar;
  3.     private ProgressBar progressBar2;
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         EdgeToEdge.enable(this);
  8.         setContentView(R.layout.activity_main);
  9.         ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
  10.             Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
  11.             v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
  12.             return insets;
  13.         });
  14.         progressBar=findViewById((R.id.pb));
  15.         progressBar2=findViewById((R.id.pb2));
  16.     }
  17.     public void leoClick(View view){
  18.         if(progressBar.getVisibility()==view.GONE){
  19.             progressBar.setVisibility((View.VISIBLE));
  20.         }else{
  21.             progressBar.setVisibility(View.GONE);
  22.         }
  23.     }
  24.     public void load(View view){
  25.         int progress = progressBar2.getProgress();
  26.         progress+=10;
  27.         progressBar2.setProgress(progress);
  28.     }
  29. }
复制代码


  • ProgressBar progressBar = findViewById();: 通过findViewById方法获取ProgressBar的实例。
  • progressBar.setProgress();: 在UI线程中更新ProgressBar的当进步度。如果ProgressBar是水平的,进度值是一个0到100的整数;如果是圆形的,进度值是一个0到10000的整数。
  • setVisibility();:控制ProgressBar的显示与隐藏。
需要注意的是,如果进度是由一个任务的执行进度决定的,为了制止UI线程阻塞,应该将该任务放在子线程中执行,然后使用runOnUiThread()方法在UI线程中更新ProgressBar的进度。
实例 

自界说控件,要求有模糊模式(圆形)的多种样式;模糊模式(水平)且点击按钮进度条消失;精确模式(水平)且点击按钮进度条进度增长10%;精确模式(水平)且进度条进度为18%。
XML代码
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3.     xmlns:app="http://schemas.android.com/apk/res-auto"
  4.     xmlns:tools="http://schemas.android.com/tools"
  5.     android:id="@+id/main"
  6.     android:layout_width="match_parent"
  7.     android:layout_height="match_parent"
  8.     android:orientation="vertical"
  9.     tools:context=".MainActivity">
  10.     <ProgressBar
  11.         style="@android:style/Widget.ProgressBar.Small"
  12.         android:layout_width="wrap_content"
  13.         android:layout_height="wrap_content" />
  14.     <ProgressBar
  15.         style="@android:style/Widget.ProgressBar.Large"
  16.         android:layout_width="wrap_content"
  17.         android:layout_height="wrap_content" />
  18.     <ProgressBar
  19.         android:id="@+id/pb"
  20.         style="?android:attr/progressBarStyleHorizontal"
  21.         android:layout_width="300dp"
  22.         android:layout_height="wrap_content" />
  23.     <Button
  24.         android:text="显示隐藏进度条"
  25.         android:onClick="leoClick"
  26.         android:layout_width="wrap_content"
  27.         android:layout_height="wrap_content" />
  28.     <ProgressBar
  29.         android:id="@+id/pb2"
  30.         style="?android:attr/progressBarStyleHorizontal"
  31.         android:max="100"
  32.         android:layout_width="300dp"
  33.         android:layout_height="wrap_content" />
  34.     <Button
  35.         android:text="模拟下载"
  36.         android:onClick="load"
  37.         android:layout_width="wrap_content"
  38.         android:layout_height="wrap_content" />
  39.     <ProgressBar
  40.         style="?android:attr/progressBarStyleHorizontal"
  41.         android:max="100"
  42.         android:layout_width="300dp"
  43.         android:indeterminate="true"
  44.         android:layout_height="wrap_content" />
  45.      <ProgressBar
  46.         style="@android:style/Widget.ProgressBar.Horizontal"
  47.         android:layout_width="match_parent"
  48.         android:layout_height="wrap_content"
  49.         android:max="100"
  50.         android:progress="18" />
  51. </LinearLayout>
复制代码
JAVA代码
  1. 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 {
  2.     private ProgressBar progressBar;
  3.     private ProgressBar progressBar2;
  4.     @Override
  5.     protected void onCreate(Bundle savedInstanceState) {
  6.         super.onCreate(savedInstanceState);
  7.         EdgeToEdge.enable(this);
  8.         setContentView(R.layout.activity_main);
  9.         ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
  10.             Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
  11.             v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
  12.             return insets;
  13.         });
  14.         progressBar=findViewById((R.id.pb));
  15.         progressBar2=findViewById((R.id.pb2));
  16.     }
  17.     public void leoClick(View view){
  18.         if(progressBar.getVisibility()==view.GONE){
  19.             progressBar.setVisibility((View.VISIBLE));
  20.         }else{
  21.             progressBar.setVisibility(View.GONE);
  22.         }
  23.     }
  24.     public void load(View view){
  25.         int progress = progressBar2.getProgress();
  26.         progress+=10;
  27.         progressBar2.setProgress(progress);
  28.     }
  29. }
复制代码
 运行截图
          
         

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


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

篮之新喜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表