自定義一個簡單的加載對話框

提醒:樣式能夠按下面的建立對話框代碼寫,其餘的忽略便可(例如靜態引用 Context),會形成內存泄漏,本身在 Activity 裏隨便封裝個方法就好了。

在公司項目遇到了這麼一個小需求,在加載網頁的時候顯示一個進度條,讓用戶知道目前正在加載中,由於若是沒有進度條,剛好某些用戶網速比較慢,那麼在加載網頁的過程當中,屏幕畫面會定在跳轉前的畫面,這樣就會給用戶形成卡頓感,這是很是很差的,因此這麼一個小需求如今就簡單的作一下吧。android

目前實現的效果是這樣的: bash

爲了實現對話框顯示時不可經過點擊對話框外部或者點按返回鍵取消,我選擇的是直接用 Dialog建立一個對話框對象,爲何不直接用 ProgressDialog呢?由於感受直接用 Dialog自由一些,根據本身需求吧,接下來開始分解步驟,很簡單。

1. 先寫好對話框的背景文件

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

    <corners android:radius="5dp" />

    <solid android:color="@color/bg_dialog" />

</shape>
複製代碼

2. 編寫對話框須要的控件內容,這裏的對話框用到的是ProgressBarTextView ,將上面寫好的背景設置給根佈局,其餘參數根據須要調整

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="@drawable/bg_dialog"
    android:orientation="vertical"
    android:paddingStart="20dp"
    android:paddingTop="10dp"
    android:paddingEnd="20dp"
    android:paddingBottom="10dp">

    <ProgressBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleX="0.5"
        android:scaleY="0.5" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:text="@string/dialog_progress_hint"
        android:textColor="#FFFFFFFF" />

</LinearLayout>
複製代碼

3. 建立Dialog對象並初始化屬性,這裏我是封裝起來了,由於不止一個Activity用到,封裝起來也方便些

public class DialogUtil {

    private static Dialog sDialog;

    public static void showProgress(Context context) {
        if (sDialog == null) init(context);
        sDialog.show();
    }

    public static void dismissProgress() {
        if (sDialog.isShowing()) sDialog.dismiss();
    }

    private static void init(Context context) {
        sDialog = new Dialog(context);
        // 修改對話框默認背景爲透明,由於不這麼設置的話,對話框默認是白色的
        // 而後你自定義的背景是黑色且有圓角,相信我,你不想看到的
        Window window = sDialog.getWindow();
        if (window != null) window.setBackgroundDrawableResource(android.R.color.transparent);
        // 設置本身編寫的佈局文件,即剛纔有 ProgressBar 和 TextView 的那個佈局文件
        sDialog.setContentView(R.layout.dialog_progress);
        // 設置不可點擊或點按返回鍵取消對話框,這樣至關於禁止了用戶與界面的交互
        // 實際狀況根據需求而定
        sDialog.setCancelable(false);
//        sDialog.setCanceledOnTouchOutside(false);
    }
}
複製代碼

4. 接下來只要在須要用到的地方,調用DialogUtil.showProgress(context)DialogUtil.dismissProgress()就能顯示對話框了,到這裏就結束了。

  • 若是有更好的實現方法,請告訴我,這篇文章的主要目的也只是記錄下本身在學習路上所遇到的一些解決問題的方法,若是還能幫助到你們,那是再好不過了。
相關文章
相關標籤/搜索