場景 進度條效果 註: 博客: https://blog.csdn.net/badao_liumang_qizhi 關註公眾號 霸道的程式猿 獲取編程相關電子書、教程推送與免費下載。 實現 將佈局改為相對佈局,然後添加一個ProgressBar,並添加id屬性。 然後通過 android:max=" ...
場景
進度條效果
註:
博客:
https://blog.csdn.net/badao_liumang_qizhi
關註公眾號
霸道的程式猿
獲取編程相關電子書、教程推送與免費下載。
實現
將佈局改為相對佈局,然後添加一個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(); //啟動進程 } }