Android:用DialogFragment实现LoadingDialog等待加载框

1、先搞好一个等待框的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:background="@color/colorPrimary"
    android:gravity="center">

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:indeterminateTintMode="src_atop"
        android:indeterminateTint="@color/white"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView"
        android:layout_marginTop="@dimen/dp_10"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:textColor="@color/white"
        tools:text="正在加载" />
</LinearLayout>

 这个布局是这样的:

2、然后开始自定义个DialogFragment了:

/**
 * 等待弹框
 */
public class LoadingDialog extends DialogFragment {

    private String msg = "正在加载";
    private boolean onTouchOutside = true;
    private TextView textView;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        Objects.requireNonNull(Objects.requireNonNull(getDialog()).getWindow()).setBackgroundDrawableResource(android.R.color.transparent);
        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        getDialog().setCanceledOnTouchOutside(onTouchOutside);
        View loadingView = inflater.inflate(R.layout.dialog_loading, container);
        textView= loadingView.findViewById(R.id.textView);
        textView.setText(msg);
        return loadingView;
    }

    public LoadingDialog setMsg(String msg) {
        this.msg = msg;
        if (textView!= null) {
            textView.setText(msg);
        }
        return this;
    }

    public LoadingDialog setOnTouchOutside(boolean onTouchOutside) {
        this.onTouchOutside = onTouchOutside;
        if(getDialog() != null){
            getDialog().setCanceledOnTouchOutside(onTouchOutside);
        }
        return this;
    }
}

3、使用:

private LoadingDialog loadingDialog;

//显示等待框
public void showLoading(String msg,boolean touch){
    if(loadingDialog == null){
        loadingDialog = new LoadingDialog();
    }else{
        loadingDialog.dismiss();
    }
    loadingDialog.setMsg(msg)
            .setOnTouchOutside(touch)
            .show(getSupportFragmentManager(),"loading");
            //fragment的话就把getSupportFragmentManager参数换成getChildFragmentManager
}

//动态修改等待框中的文字
public void setLoadingMsg(String msg){
    if(loadingDialog == null){
        return;
    }
    loadingDialog.setMsg(msg);
}

//隐藏等待框
public void hideLoading(){
    if(loadingDialog != null){
        loadingDialog.dismiss();
    }
}

 打完,收工!

发布了60 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_35584878/article/details/103879721
今日推荐