ZDialog.java 5.04 KB
Newer Older
霍志良 committed
1 2 3 4
package com.ydl.audioim.widget;

import android.app.Dialog;
import android.content.Context;
5
import android.os.Build;
霍志良 committed
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;

import androidx.annotation.NonNull;

import com.ydl.audioim.R;


/**
 * Created on 2018/1/18  11:24
 *
 * @author Z
 * @version : 1.0.0
 * 利用Builder模式构建一个通用的Dialog,现在暂时不支持在ZDialog中自定义加载图片
 * use like this:
 * new ZDialog.Builder(this)
 * .setContentView(R.layout.zdialog_normal)
 * .setFullScreen()
 * .setCancelAble(true)
 * .setGravity(ZDialogDirection.FROM_BOTTOM)
 * .setText(R.id.tv_normal_test,"哈哈哈哈")
 * .setOnClickListener(R.id.btn_normal, ...)
 *
 */

public class ZDialog extends Dialog {

    private ZDialogController mDialogController;

    public ZDialog( Context context) {
        super(context, R.style.audioim_ZDialogDefaultStyle);
        init();
    }

    private void init() {
        mDialogController = new ZDialogController(this, getWindow());
    }


    public ZDialog(@NonNull Context context, int themeResId) {
        super(context, themeResId);
        init();
    }

    public void setOnClickListener(int viewId, View.OnClickListener listener) {
        mDialogController.setOnClickListener(viewId, listener);
    }

    public EditText getEditText(int viewId) {
        return mDialogController.getEditText(viewId);
    }

    public View findDialogView(int viewId) {
        return mDialogController.findView(viewId);
    }


    public static class Builder {
        private ZDialogController.ZDialogParams mDialogParams;


        public Builder(Context context) {
            this(context, R.style.audioim_ZDialogDefaultStyle);
        }

        public Builder(Context context, int themeResId) {
            mDialogParams = new ZDialogController.ZDialogParams(context, themeResId);
            //设置一个默认的动画
            mDialogParams.animation = R.style.audioim_ZDialogDefaultAnimation;
        }

        public Builder setContentView(View contentView) {
            mDialogParams.contentView = contentView;
            mDialogParams.contentResId = 0;
            return this;
        }

        public Builder setContentView(int contentViewResId) {
            mDialogParams.contentResId = contentViewResId;
            mDialogParams.contentView = null;
            return this;
        }

        public Builder setText(int viewId, CharSequence charSequence) {
            mDialogParams.textArray.put(viewId, charSequence);
            return this;
        }

        public Builder setText(int viewId, int strId) {
            mDialogParams.textArray.put(viewId, mDialogParams.context.get().getResources().getString(strId));
            return this;
        }


        public Builder setOnClickListener(int viewId, View.OnClickListener onClickListener) {
            mDialogParams.clickViewArray.put(viewId, onClickListener);
            return this;
        }

        public Builder setOnDismissListener(OnDismissListener onDismissListener) {
            mDialogParams.onDismissListener = onDismissListener;
            return this;
        }

        public Builder setOnCancelListener(OnCancelListener onCancelListener) {
            mDialogParams.onCancelListener = onCancelListener;
            return this;
        }

        public Builder setOnKeyListener(OnKeyListener onKeyListener) {
            mDialogParams.onKeyListener = onKeyListener;
            return this;
        }

        public Builder setFullScreen() {
            mDialogParams.defaultWidth = ViewGroup.LayoutParams.MATCH_PARENT;
            return this;
        }

127 128 129 130 131
        public Builder width(int width){
            mDialogParams.defaultWidth = width;
            return this;
        }

霍志良 committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172
        public Builder setGravity(@ZDialogDirection.ZGravity int direction) {
            switch (direction) {
                case ZDialogDirection.FROM_TOP:
                    mDialogParams.direction = Gravity.TOP;
                    break;
                case ZDialogDirection.FROM_BOTTOM:
                    mDialogParams.direction = Gravity.BOTTOM;
                default:
                    break;
            }

            return this;
        }

        public Builder setAnimation(int animationRes) {
            mDialogParams.animation = animationRes;
            return this;
        }

        public Builder setCancelAble(boolean cancelAble) {
            mDialogParams.cancelable = cancelAble;
            return this;
        }

        public ZDialog show() {
            ZDialog zDialog = create();
            zDialog.show();
            return zDialog;
        }

        private ZDialog create() {
            ZDialog dialog = new ZDialog(mDialogParams.context.get(), mDialogParams.themeResId);
            mDialogParams.apply(dialog.mDialogController);
            dialog.setCancelable(mDialogParams.cancelable);
            dialog.setOnCancelListener(mDialogParams.onCancelListener);
            dialog.setOnDismissListener(mDialogParams.onDismissListener);
            return dialog;
        }

    }
}