App中n多地方会有弹框提示,用户进行二次确认,而对这样的情况,我们都会采用统一的弹框样式。针对项目,采用了Builder模式封装了一个Dialog,供参考。
- 使用范例:
new NormalTipDialog.Builder(this)
.setTitle("设置标题")
.setMessage("文本数据测试试试试试\n1.text......\n2.text.......\n3.textssssss")
// 设置右上角是否带关闭按钮 默认不显示
.setShowBackBtn(true)
.setRightButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击确定
}
})
.setLeftButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 点击取消
dialog.dismiss();
}
})
// 设置点击外部区域取消
.setCancelable(true)
.show();
XML布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="280dp"
android:layout_height="160dp"
android:layout_gravity="center"
android:background="@drawable/mydialog_bg_new_ui">
<TextView
android:id="@+id/dialog_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/d_10"
android:gravity="bottom|center_horizontal"
android:textColor="@color/C1"
android:textSize="16sp"
android:visibility="gone"
tools:text="标题"
tools:visibility="visible"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/ll_dialog_btn"
android:layout_marginTop="30dp"
android:gravity="center">
<TextView
android:id="@+id/dialog_hint"
android:layout_width="240dp"
android:layout_height="wrap_content"
android:gravity="center"
android:lineSpacingExtra="6dp"
android:textColor="@color/C3"
android:textSize="12sp"
tools:text="内容内容内容内容内容内容内容内容"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_dialog_btn"
android:layout_width="match_parent"
android:layout_height="38dp"
android:layout_alignParentBottom="true"
android:layout_marginBottom="@dimen/d_15"
android:orientation="horizontal">
<Button
android:id="@+id/dialog_btn_left"
android:layout_width="0px"
android:layout_height="@dimen/d_36"
android:layout_marginLeft="20dp"
android:layout_marginRight="5dp"
android:layout_weight="1"
android:background="@drawable/chat_btn1_disable"
android:gravity="center"
android:text="取消"
android:textColor="@color/C6"
android:textSize="16sp"/>
<Button
android:id="@+id/dialog_btn_right"
android:layout_width="0px"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_marginLeft="5dp"
android:layout_marginRight="20dp"
android:layout_weight="1"
android:background="@drawable/chat_btn_send_selector"
android:gravity="center"
android:text="确定"
android:textColor="@color/C5"
android:textSize="16sp"/>
</LinearLayout>
<ImageView
android:id="@+id/dialog_btn_back"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_alignParentRight="true"
android:layout_margin="@dimen/d_5"
android:padding="@dimen/d_8"
android:src="@drawable/button_close"
android:visibility="gone"
/>
</RelativeLayout>
Java代码
/**
* 描述:app内通用弹窗
*
* @author yangjiaming
* @date 2018/1/31
*/
public class NormalTipDialog extends Dialog {
public NormalTipDialog(Context context) {
super(context, R.style.base_dialog);
}
public NormalTipDialog(Context context, int theme) {
super(context, theme);
}
public static class Builder {
private Context context;
private String title;
private CharSequence message;
private String positiveButtonText;
private String negativeButtonText;
private boolean showBackBtn;
private boolean cancelable;
private OnClickListener positiveButtonClickListener;
private OnClickListener negativeButtonClickListener;
public Builder(Context context) {
this.context = context;
}
public Builder setMessage(CharSequence message) {
this.message = message;
return this;
}
/**
* 设置dialog显示数据
*/
public Builder setMessage(int message) {
this.message = context.getText(message);
return this;
}
/**
* 设置dialog标题
*/
public Builder setTitle(int title) {
this.title = (String) context.getText(title);
return this;
}
/**
* 设置dialog标题
*/
public Builder setTitle(String title) {
this.title = title;
return this;
}
/**
* 设置是否带返回键 默认不带
*/
public Builder setShowBackBtn(boolean isShow) {
this.showBackBtn = isShow;
return this;
}
public Builder setCancelable(boolean cancelable) {
this.cancelable = cancelable;
return this;
}
/**
* 设置取消按钮监听
*/
public Builder setLeftButton(int positiveButtonText,
OnClickListener listener) {
this.positiveButtonText = (String) context
.getText(positiveButtonText);
this.positiveButtonClickListener = listener;
return this;
}
public Builder setLeftButton(String positiveButtonText,
OnClickListener listener) {
this.positiveButtonText = positiveButtonText;
this.positiveButtonClickListener = listener;
return this;
}
/**
* 设置确认按钮监听
*/
public Builder setRightButton(int negativeButtonText,
OnClickListener listener) {
this.negativeButtonText = (String) context
.getText(negativeButtonText);
this.negativeButtonClickListener = listener;
return this;
}
public Builder setRightButton(String negativeButtonText,
OnClickListener listener) {
this.negativeButtonText = negativeButtonText;
this.negativeButtonClickListener = listener;
return this;
}
public void show() {
NormalTipDialog dialog = create();
dialog.show();
}
private NormalTipDialog create() {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
final NormalTipDialog dialog = new NormalTipDialog(context);
View layout = inflater.inflate(R.layout.dialog_normal_tip, null);
dialog.addContentView(layout, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
dialog.getWindow().getAttributes().width = UIUtils.dip2px(275);
dialog.getWindow().getAttributes().height = UIUtils.dip2px(160) + ((TextView) layout.findViewById(R.id.dialog_hint)).getLineCount() * UIUtils.dip2px(30);
dialog.setCancelable(cancelable);
layout.findViewById(R.id.dialog_title).setVisibility(TextUtils.isEmpty(title) ? View.GONE : View.VISIBLE);
((TextView) layout.findViewById(R.id.dialog_title)).setText(title);
layout.findViewById(R.id.dialog_btn_back).setVisibility(showBackBtn ? View.VISIBLE : View.GONE);
layout.findViewById(R.id.dialog_btn_back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.dismiss();
}
});
if (positiveButtonText != null) {
((Button) layout.findViewById(R.id.dialog_btn_left))
.setText(positiveButtonText);
if (positiveButtonClickListener != null) {
layout.findViewById(R.id.dialog_btn_left)
.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
positiveButtonClickListener.onClick(dialog,
DialogInterface.BUTTON_POSITIVE);
}
});
}
} else {
layout.findViewById(R.id.dialog_btn_left).setVisibility(
View.GONE);
}
if (negativeButtonText != null) {
((Button) layout.findViewById(R.id.dialog_btn_right))
.setText(negativeButtonText);
if (negativeButtonClickListener != null) {
layout.findViewById(R.id.dialog_btn_right)
.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
negativeButtonClickListener.onClick(dialog,
DialogInterface.BUTTON_NEGATIVE);
}
});
}
} else {
layout.findViewById(R.id.dialog_btn_right).setVisibility(
View.GONE);
}
if (message != null) {
((TextView) layout.findViewById(R.id.dialog_hint)).setText(message);
}
dialog.setContentView(layout);
return dialog;
}
}
}