在公司項目遇到了這麼一個小需求,在加載網頁的時候顯示一個進度條,讓用戶知道目前正在加載中,由於若是沒有進度條,剛好某些用戶網速比較慢,那麼在加載網頁的過程當中,屏幕畫面會定在跳轉前的畫面,這樣就會給用戶形成卡頓感,這是很是很差的,因此這麼一個小需求如今就簡單的作一下吧。android
目前實現的效果是這樣的: bash
Dialog
建立一個對話框對象,爲何不直接用
ProgressDialog
呢?由於感受直接用
Dialog
自由一些,根據本身需求吧,接下來開始分解步驟,很簡單。
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="5dp" />
<solid android:color="@color/bg_dialog" />
</shape>
複製代碼
ProgressBar
和TextView
,將上面寫好的背景設置給根佈局,其餘參數根據須要調整<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>
複製代碼
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);
}
}
複製代碼
DialogUtil.showProgress(context)
或DialogUtil.dismissProgress()
就能顯示對話框了,到這裏就結束了。