自定义dialog

自定义对话框实现

项目中我们或多或少会自己自定义一个dialog,具体如何自定义对话框呢?以下将一步一步指导你实现一个简单的对话框。

1、首先新增一个CustomDialog的类继承Dialog 如下

2、继承后重写它的三个方法

public CustomDialog(Builder builder) {
    super(builder.context);
    context = builder.context;
    cancelTouchout = builder.cancelTouchout;
    view = builder.view;
}

public CustomDialog(Builder builder, int themeResId) {
    super(builder.context, themeResId);
    context = builder.context;
    cancelTouchout = builder.cancelTouchout;
    view = builder.view;

}

protected CustomDialog(Builder builder, boolean cancelable, @Nullable OnCancelListener cancelListener) {
    super(builder.context, cancelable, cancelListener);
}

3、我们可以通过Builder向对话框传入所需要的参数

public static final class Builder {
    private Context context;
    private boolean cancelTouchout;
    private View view;
    private int resStyle = -1;
    public Builder(Context context) {
        this.context = context;
    }

    public Builder view(int resView) {
        view = LayoutInflater.from(context).inflate(resView, null);
        return this;
    }

    public Builder style(int resStyle) {
        this.resStyle = resStyle;
        return this;
    }

    public Builder cancelTouchout(boolean val) {
        cancelTouchout = val;
        return this;
    }

    public Builder addViewOnclick(int viewRes,View.OnClickListener listener){
        view.findViewById(viewRes).setOnClickListener(listener);
        return this;
    }


    public CustomDialog build() {
        if (resStyle != -1) {
            return new CustomDialog(this, resStyle);
        } else {
            return new CustomDialog(this);
        }
    }
}

4、接着我们重写对话框的onCreate方法

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(view);
    setCanceledOnTouchOutside(cancelTouchout);

}

5.最后我们就可以在activity开启对话框 如下方式调用

CustomDialog.Builder builder = new CustomDialog.Builder(this);

dialog= builder.cancelTouchout(false)
                .view(R.layout.dialog_login)
                .style(R.style.Dialog)
        .addViewOnclick(R.id.btn_ok, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        })
        .addViewOnclick(R.id.btn_cancel, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                dialog.dismiss();
            }
        })
        .build();
dialog.show();

6、运行效果图

完整代码

public class CustomDialog extends Dialog {
    private Context context;
    private boolean cancelTouchout;
    private View view;
    public CustomDialog(Builder builder) {
        super(builder.context);
        context = builder.context;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }

    public CustomDialog(Builder builder, int themeResId) {
        super(builder.context, themeResId);
        context = builder.context;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;

    }

    protected CustomDialog(Builder builder, boolean cancelable, @Nullable OnCancelListener cancelListener) {
        super(builder.context, cancelable, cancelListener);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(view);
        setCanceledOnTouchOutside(cancelTouchout);

    }
    public static final class Builder {
        private Context context;
        private boolean cancelTouchout;
        private View view;
        private int resStyle = -1;
        public Builder(Context context) {
            this.context = context;
        }

        public Builder view(int resView) {
            view = LayoutInflater.from(context).inflate(resView, null);
            return this;
        }

        public Builder style(int resStyle) {
            this.resStyle = resStyle;
            return this;
        }

        public Builder cancelTouchout(boolean val) {
            cancelTouchout = val;
            return this;
        }

        public Builder addViewOnclick(int viewRes,View.OnClickListener listener){
            view.findViewById(viewRes).setOnClickListener(listener);
            return this;
        }


        public CustomDialog build() {
            if (resStyle != -1) {
                return new CustomDialog(this, resStyle);
            } else {
                return new CustomDialog(this);
            }
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值