Android 控件ProgressBar进度条
封面图
•
2025-10-27
•
Android开发
250
0
0
0
在 Android 开发中,`ProgressBar` 是一个用于显示进度的控件。它常用于表示任务正在执行中的状态,例如加载数据、下载文件等。根据不同的样式和用途,`ProgressBar` 有几种常见的类型。 --- ## 一、ProgressBar 的基本使用 ### 1. 在 XML 中定义 ProgressBar ```xml <ProgressBar android:id="@+id/progressBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> ``` ### 2. 在 Java 中控制 ProgressBar ```java ProgressBar progressBar = findViewById(R.id.progressBar); // 设置最大值(默认是 100) progressBar.setMax(100); // 设置当前进度 progressBar.setProgress(50); ``` ### 3. 在 Kotlin 中控制 ProgressBar ```kotlin val progressBar: ProgressBar = findViewById(R.id.progressBar) // 设置最大值 progressBar.max = 100 // 设置当前进度 progressBar.progress = 50 ``` --- ## 二、ProgressBar 的样式(Style) Android 提供了多种 `ProgressBar` 的样式: ### 1. **Horizontal(水平进度条)** ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:max="100" android:progress="50" /> ``` > 适用于需要显示进度百分比的场景,如下载、上传等。 --- ### 2. **Small(小圆圈)** ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` > 常用于显示“加载中”状态,不显示具体数值。 --- ### 3. **Large(大圆圈)** ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` > 更大的圆形进度条,适合界面中心提示加载。 --- ### 4. **Inverse(反色)** ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleInverse" android:layout_width="wrap_content" android:layout_height="wrap_content" /> ``` > 通常用于深色背景上,颜色与背景相反。 --- ## 三、自定义 ProgressBar 你可以通过 `style` 或 `drawable` 来自定义进度条的外观: ### 1. 自定义背景和进度条颜色(XML) ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="10dp" android:progressDrawable="@drawable/custom_progress_bar" android:indeterminate="false" android:max="100" android:progress="50" /> ``` 然后在 `res/drawable/custom_progress_bar.xml` 中定义: ```xml <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background"> <shape> <solid android:color="#e0e0e0" /> <corners android:radius="5dp" /> </shape> </item> <item android:id="@android:id/progress"> <clip> <shape> <solid android:color="#4caf50" /> <corners android:radius="5dp" /> </shape> </clip> </item> </layer-list> ``` --- ## 四、Indeterminate(不确定模式) 有些时候你不知道任务的具体进度,可以使用“不确定”模式: ```xml <ProgressBar android:id="@+id/progressBar" style="?android:attr/progressBarStyleLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:indeterminate="true" /> ``` > 此时进度条会一直旋转,不会显示进度值。 --- ## 五、使用 ProgressBar 实现加载动画 如果你希望在后台线程中更新进度,需要注意不能直接在主线程中做耗时操作,可以使用 `AsyncTask` 或 `Handler`、`Thread` 等方式。 ### 示例:使用 `AsyncTask` 更新进度 ```java new AsyncTask<Void, Integer, Void>() { @Override protected Void doInBackground(Void... voids) { for (int i = 0; i <= 100; i++) { publishProgress(i); try { Thread.sleep(50); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onProgressUpdate(Integer... values) { progressBar.setProgress(values[0]); } }.execute(); ``` --- ## 六、Material Design 中的 ProgressBar 在 Material Design 中,推荐使用 `LinearProgressIndicator` 或 `CircularProgressIndicator`(从 Android 12 开始支持): ```xml <com.google.android.material.progressindicator.LinearProgressIndicator android:id="@+id/linearProgressIndicator" android:layout_width="match_parent" android:layout_height="4dp" app:indeterminate="false" app:progress="50" /> <com.google.android.material.progressindicator.CircularProgressIndicator android:id="@+id/circularProgressIndicator" android:layout_width="48dp" android:layout_height="48dp" app:indeterminate="true" /> ``` > 需要添加 Material 库依赖: ```gradle implementation 'com.google.android.material:material:1.9.0' ``` --- ## 总结 | 类型 | 描述 | 使用场景 | |------|------|----------| | Horizontal | 水平进度条 | 下载、加载等 | | Small / Large | 圆形进度条 | 加载中提示 | | Indeterminate | 不确定模式 | 不知道进度的任务 | | 自定义 | 可自定义颜色、形状 | 定制化 UI | 如果你有特定需求(比如动态更新、动画效果等),欢迎继续提问!
上一篇:
Android 下使用 JSON 实现 HTTP 请求
下一篇:
Android应用自动更新功能的代码实现
标题录入,一次不能超过6条
留言
评论