场景

进度条效果

Android中ProgressBar的使用-通过Handler与Message实现进度条显示_第1张图片

 

 


注:

博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

将布局改为相对布局,然后添加一个ProgressBar,并添加id属性。

然后通过

 android:max="100"

 

设置进度条最大值

通过

android:layout_alignParentBottom="true"android:layout_marginBottom="50dp"

 

设置其位置在底部并设置外边距

关于进度条的样式,参考如下

Android中ProgressBar的使用-通过Handler与Message实现进度条显示_第2张图片

 

 

这里使用的进度条样式是

style="?android:attr/progressBarStyleHorizontal"

 

完整xml示例代码

<?xml version="1.0" encoding="utf-8"?>"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"        />

 

然后来到Activity

要实现进度条的简单流程如下

 Android中ProgressBar的使用-通过Handler与Message实现进度条显示_第3张图片

 

 

首先在Activity中声明进度条对象、进度值、Handler对象。

关于Hnadler对象,因为Android不支持在主线程中更新UI控件,所以提供了Handler对象。

首先通过id获取进度条对象,然后实例化Handler,需要重写其handleMessage方法

Android中ProgressBar的使用-通过Handler与Message实现进度条显示_第4张图片

 

 

在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(); //启动进程    }} 

更多相关文章

  1. Android中使用WebView, WebChromeClient和WebViewClient加载网页
  2. [Android] AsyncTask使用实例---加载网络图片
  3. Android:屏幕旋转时,禁止Activity重新加载
  4. Android之MVP模式实现登录和网络数据加载
  5. Android 进度暂停和继续
  6. Android Activity之间传递类对象
  7. 详谈 Android 高大上的图片加载框架 Glide
  8. 3-14 servlet 传出对象给 Android
  9. android 对象保存到SP

随机推荐

  1. 修改android 睡眠的时间的两种方法
  2. android基础知识15:获得android系统信息01
  3. android获取系统标准时区的时间
  4. Android特效第四篇:Android抽屉实现
  5. Android设置颜色的几种方法
  6. android:versionCode和android:versionNa
  7. 【Android】滚动条属性
  8. Android(安卓)安全加密:数字签名和数字证
  9. :如何安装apk文件在Android仿真器中
  10. Android(安卓)中文API合集(3)(83篇)(chm