在公司项目遇到了这么一个小需求,在加载网页的时候显示一个进度条,让用户知道目前正在加载中,由于若是没有进度条,刚好某些用户网速比较慢,那么在加载网页的过程当中,屏幕画面会定在跳转前的画面,这样就会给用户形成卡顿感,这是很是很差的,因此这么一个小需求如今就简单的作一下吧。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()
就能显示对话框了,到这里就结束了。