2023.07.17 | admin | 141次围观
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。
然后通过
android:max="100"
设置进度条最大值
通过
android:layout_alignParentBottom="true"
android:layout_marginBottom="50dp"
设置其位置在底部并设置外边距
关于进度条的样式android进度条对话框,参考如下
这里使用的进度条样式是
style="?android:attr/progressBarStyleHorizontal"
完整xml示例代码
然后来到Activity
要实现进度条的简单流程如下
首先在Activity中声明进度条对象、进度值、Handler对象。
关于Hnadler对象,因为Android不支持在主线程中更新UI控件,所以提供了Handler对象。
首先通过id获取进度条对象,然后实例化Handler,需要重写其handleMessage方法
在handleMessage方法中android进度条对话框,通过msg的标识来判断是否完成进度条的加载。
然后需要新开一个线程,在线程中随机给进度条添加进度值,然后判断是否到100,进而报告不同的进度和标识变量。
完整示例代码
package com.badao.relativelayouttest;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.util.prefs.PreferenceChangeEvent;
public class ProgressBarActivity extends AppCompatActivity {
private ProgressBar progressBar;
private int mProgress = 0;
private Handler mHandler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_progress_bar);
//获取进度条控件
progressBar = (ProgressBar) findViewById(R.id.progressBar);
//Android 不支持在主线程中更新UI组件 所以提供了Handler对象
mHandler = new Handler(){
//通过消息代码msg进行区分是否加载完成
@Override
public void handleMessage(@NonNull Message msg) {
if(msg.what ==0x111)
{
//给进度条赋值
progressBar.setProgress(mProgress);
}else
{
Toast.makeText(ProgressBarActivity.this,"加载完成",Toast.LENGTH_SHORT).show();
progressBar.setVisibility(View.GONE);
}
}
};
//新建一个线程
new Thread(new Runnable() {
@Override
public void run() {
while (true)
{
//具体执行的方法的进度,返回进度
mProgress = doWork();
//定义一个标识,标识进度条是否加载完成
Message message = new Message();
if(mProgress <100)
{
//表示还没加载到100 则向进度条报告进度
message.what = 0x111;
mHandler.sendMessage(message);
}else
{
//表示此时已经加载完成,向Handler发送消息 并跳出循环
message.what =0x110;
mHandler.sendMessage(message);
break;
}
}
}
//具体执行 并返回进度的方法
private int doWork()
{
//进度条随机加进度
mProgress +=Math.random()*10;
try {
//进程休眠0.5秒
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
return mProgress;
}
}).start(); //启动进程
}
}
版权声明
本文仅代表作者观点。
本文系作者授权发表,未经许可,不得转载。
发表评论