常用属性
android:max
进度条的最大值
android:progress
进度条已完成进度值
android:indeterminate
如果设置为true
,则进度条不精确显示进度
style="?android:attr/progressBarStyleHorizontal"
水平进度条
基本框架
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
运行之后就可以得到一个“加载中”的圆圈进度条:
按钮控制
添加一个按钮与其点击事件,给进度条取个id,方便在java代码中获取。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ProgressBar
android:id="@+id/pb"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:text="显示/隐藏进度条"
android:onClick="myClick"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
在java代码中获取进度条的id,并编写点击事件:
package com.example.myprogressbar;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ProgressBar;
public class MainActivity extends AppCompatActivity {
private ProgressBar mypb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mypb=findViewById(R.id.pb);
}
public void myClick(View view) {
if(mypb.getVisibility()==View.GONE){
mypb.setVisibility(View.VISIBLE);
}
else{
mypb.setVisibility(View.GONE);
}
}
}
代码的意思是,如果进度条不可见,则令其可见;否则令其不可见。可在虚拟机上看到效果如下:
通过点击按钮,就可以控制进度条是否显示。
这样的设计在加载网页的时候也是类似的,不过判断条件就变成了数据是否加载完成。
条形进度条
想要一个条形的进度条,我们可以用安卓预设的style。
<ProgressBar
android:id="@+id/pb2"
style="?android:attr/progressBarStyleHorizontal"
android:max="100"
android:layout_width="300dp"
android:layout_height="wrap_content"/>
设置该进度条的最大值为100,其进度可以在android:progress
中查看。在这里,我们用按钮点击来模拟加载数据,控制进度条的值。
<Button
android:text="点击为进度条助力"
android:onClick="load"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
public void load(View view) {
int progress=mypb2.getProgress();
progress+=10;
mypb2.setProgress(progress);
}
每次点击增加
1
10
\frac{1}{10}
101的进度,效果如下:
如果将android:indeterminate
设置为true,则不显示进度,进度条就变成加载动画的效果。