Builder模式 - App内通用弹框

3 篇文章 0 订阅
3 篇文章 0 订阅

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;

        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值