自定义一个简单的加载对话框

提醒:样式能够按下面的建立对话框代码写,其余的忽略便可(例如静态引用 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()就能显示对话框了,到这里就结束了。

  • 若是有更好的实现方法,请告诉我,这篇文章的主要目的也只是记录下本身在学习路上所遇到的一些解决问题的方法,若是还能帮助到你们,那是再好不过了。
相关文章
相关标签/搜索