2.08ProgressBar(进度条)-UI组件-Android
ProgressBar(进度条)-UI组件-Android
常用属性
属性名 | 说明 |
---|---|
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的样式. |
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 |
案例
<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">
<!-- 系统提供的圆形进度条,依次是大中小 -->
<ProgressBar
style="@android:style/Widget.ProgressBar.Small"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<!-- 圆形进度-->
<ProgressBar
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:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="0" /><!--android:progress 初始进度 ,默认18-->
<ProgressBar
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:indeterminate="true" />
<!--android:indeterminate="true" 进度不精确的显示-->
</LinearLayout>
package com.ttit.helloworld;
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; //最大进度值
//处理handler传递的消息
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.progressbar_layout);
//获取组件
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);//间隔1s
currentProgress += 10;//进度加10
if (currentProgress > maxProgress) {
break;
}
mHandler.sendEmptyMessage(0);//发送消息,子线程发送到主线程
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
}
}
样式
<style name="Widget.ProgressBar.Small">
<item name="indeterminateDrawable">@drawable/progress_small_white</item>
<item name="minWidth">16dip</item>
<item name="maxWidth">16dip</item>
<item name="minHeight">16dip</item>
<item name="maxHeight">16dip</item>
</style>
<style name="Widget.ProgressBar.Large">
<item name="indeterminateDrawable">@drawable/progress_large_white</item>
<item name="minWidth">76dip</item>
<item name="maxWidth">76dip</item>
<item name="minHeight">76dip</item>
<item name="maxHeight">76dip</item>
</style>
<style name="Widget.ProgressBar.Horizontal">
<item name="indeterminateOnly">false</item>
<item name="progressDrawable">@drawable/progress_horizontal</item>
<item name="indeterminateDrawable">@drawable/progress_indeterminate_horizontal</item>
<item name="minHeight">20dip</item>
<item name="maxHeight">20dip</item>
<item name="mirrorForRtl">true</item>
</style>