该自定义dialog可自定义提示语,自定义是否展示提示语
如图所以
1. 核心代码如下;建造者模式
public class LoadingDialog extends Dialog {
public LoadingDialog(@NonNull Context context) {
super(context);
}
public LoadingDialog(@NonNull Context context, int themeResId) {
super(context, themeResId);
}
protected LoadingDialog(@NonNull Context context, boolean cancelable, @Nullable OnCancelListener cancelListener) {
super(context, cancelable, cancelListener);
}
public static class Builder {
private Context mContext;
private String message;
private boolean isShow;
private boolean isCanCancel;
private boolean isCanCancelOutSide;
public Builder(Context context) {
mContext = context;
}
/**
* 设置提醒的消息
*
* @param message
* @return
*/
public Builder setMessage(String message) {
this.message = message;
return this;
}
/**
* 设置是否显示消息
*
* @param isShow
* @return
*/
public Builder setShowMessage(boolean isShow) {
this.isShow = isShow;
return this;
}
/**
* 设置按返回键是否取消dialog
*
* @param isCanCancel
* @return
*/
public Builder setCanCancel(boolean isCanCancel) {
this.isCanCancel = isCanCancel;
return this;
}
/**
* 设置点击屏幕之外是否能取消dialog
*
* @param isCanCancelOutSide
* @return
*/
public Builder setCanCancelOutSide(boolean isCanCancelOutSide) {
this.isCanCancelOutSide = isCanCancelOutSide;
return this;
}
/**
* 建造者模式,展示dialog
*
* @return
*/
public LoadingDialog create() {
LayoutInflater from = LayoutInflater.from(mContext);
View view = from.inflate(R.layout.dialog_loading, null);
LoadingDialog loadingPostDialog = new LoadingDialog(mContext, R.style.MyLoadingDialogStyle);
loadingPostDialog.setContentView(view);
loadingPostDialog.setCancelable(isCanCancel);
loadingPostDialog.setCanceledOnTouchOutside(isCanCancelOutSide);
TextView tipTextView = (TextView) view.findViewById(R.id.tipTextView);
if (isShow) {
tipTextView.setText(message);
} else {
tipTextView.setVisibility(View.GONE);
}
return loadingPostDialog;
}
}
}
2. 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/dialog_loading_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/offset_150dp"
android:layout_height="@dimen/offset_110dp"
android:background="@drawable/loading_bg"
android:gravity="center"
android:orientation="vertical"
android:paddingBottom="@dimen/offset_10dp"
android:paddingLeft="@dimen/offset_5dp"
android:paddingRight="@dimen/offset_5dp"
android:paddingTop="@dimen/offset_10dp">
<ProgressBar
android:id="@+id/progressBar1"
android:layout_width="@dimen/offset_35dp"
android:layout_height="@dimen/offset_35dp"
android:layout_gravity="center_horizontal"
android:indeterminateBehavior="cycle"
android:indeterminateDrawable="@drawable/dialog_loading"
android:indeterminateOnly="true" />
<TextView
android:id="@+id/tipTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/offset_15dp"
android:text="加载数据中..."
android:textColor="#f0f0f0"
android:textSize="@dimen/font_15sp" />
</LinearLayout>
</LinearLayout>
3. 样式
<style name="MyLoadingDialogStyle">
<!--透明的背景-->
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<!--无标题-->
<item name="android:windowNoTitle">true</item>
<!--悬浮样式-->
<item name="android:windowIsFloating">true</item>
<!--设置窗体透明-->
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<!--false弹出的对话框背景为亮的,true弹出的对话框背景为暗的-->
<item name="android:backgroundDimEnabled">false</item>
</style>