自定义Dialog

1.在res/value/styles下

<style name="Dialog" parent="android:style/Theme.Dialog">
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowNoTitle">true</item>
    </style>

2.复制粘贴下面的


public class MyDialog extends Dialog {

    private Context context;
    private int height, width;
    private boolean cancelTouchout;
    private View view;

    public MyDialog(@NonNull Builder builder) {
        super(builder.context);

        context = builder.context;
        context = builder.context;
        height = builder.height;
        width = builder.width;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }

    public MyDialog(@NonNull Builder builder, @StyleRes int themeResId) {
        super(builder.context, themeResId);
        context = builder.context;
        height = builder.height;
        width = builder.width;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }

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

        setCanceledOnTouchOutside(cancelTouchout);

        Window win = getWindow();
        WindowManager.LayoutParams lp = win.getAttributes();
        lp.gravity = Gravity.CENTER;
        lp.height = height;
        lp.width = width;
        win.setAttributes(lp);
    }

    public static final class Builder {
        private Context context;
        private int height, width;
        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 heightdp(int val) {
            height = DensityUtil.dip2px(context, val);
            return this;
        }

        public Builder widthdp(int val) {
            width = DensityUtil.dip2px(context, val);
            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 MyDialog build() {
            return resStyle == -1 ? new MyDialog(this) : new MyDialog(this, resStyle);
        }
    }

}

用法

 MyDialog.Builder builder = new MyDialog.Builder(WaitPayActivity.this);
                        dialog = builder.style(R.style.Dialog)
                                .view(R.layout.dialog_cancel_pay)
                                .heightdp(264)
                                .widthdp(240)
                                .cancelTouchout(false)
                                .addViewOnclick(R.id.btn_confirm, WaitPayActivity.this)
                                .build();
                        dialog.show();

http://www.jianshu.com/p/64446940eccf

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • http://blog.csdn.net/harvic880925/article/details/4271277...
    楷桐阅读 3,573评论 0 1
  • 效果图如下 点击Button调用代码 Dialog的自定义布局 Dialog的自定义布局Share样式,drawa...
    Lrxc阅读 17,189评论 0 9
  • 1、前言# 然而就先特么扯个犊子…##### 2、概述 百度上各种自定义对话框很多,可是感觉都好乱呀呀呀呀。之前写...
    路人葵阅读 14,257评论 16 58
  • 说明 此文模仿http://www.jianshu.com/p/68dc2d15537e,结合了自身需求更改了部分...
    简书ZJM阅读 2,755评论 0 0
  • 版权声明:本文为 zhangxiao原创文章,可以随意转载,但必须在明确位置注明出处!!!转载请标明出处:http...
    zhangxiao阅读 8,381评论 2 9

友情链接更多精彩内容