Android中ProgressBar的使用-通过Handler与Message实现进度条显示
程序员文章站
2022-06-23 22:38:34
场景 进度条效果 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。 然后通过 android:max=" ......
场景
进度条效果
注:
博客:
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
实现
将布局改为相对布局,然后添加一个progressbar,并添加id属性。
然后通过
android:max="100"
设置进度条最大值
通过
android:layout_alignparentbottom="true" android:layout_marginbottom="50dp"
设置其位置在底部并设置外边距
关于进度条的样式,参考如下
这里使用的进度条样式是
style="?android:attr/progressbarstylehorizontal"
完整xml示例代码
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".progressbaractivity"> <progressbar android:layout_width="match_parent" android:layout_height="wrap_content" style="?android:attr/progressbarstylehorizontal" android:max="100" android:layout_alignparentbottom="true" android:layout_marginbottom="50dp" android:id="@+id/progressbar" /> </relativelayout>
然后来到activity
要实现进度条的简单流程如下
首先在activity中声明进度条对象、进度值、handler对象。
关于hnadler对象,因为android不支持在主线程中更新ui控件,所以提供了handler对象。
首先通过id获取进度条对象,然后实例化handler,需要重写其handlemessage方法
在handlemessage方法中,通过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(); //启动进程 } }
上一篇: HTML5创建高德地图