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();
}
}
打完,收工!