Android开发自定义Dialog

一、定义Dialog类

public class NoticeDialog extends Dialog {
    
    

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

    public NoticeDialog(Builder builder) {
    
    
        super(builder.context);
        context = builder.context;
        height = builder.height;
        width = builder.width;
        cancelTouchout = builder.cancelTouchout;
        view = builder.view;
    }


    private NoticeDialog(Builder builder, int resStyle) {
    
    
        super(builder.context, resStyle);
        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);//调整dialog大小
    }

    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 heightpx(int val) {
    
    
            height = val;
            return this;
        }
		//设置宽度
        public Builder widthpx(int val) {
    
    
            width = val;
            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 Builder addViewVisible(int visibility){
    
    
            view.findViewById(R.id.dialogCancelButton).setVisibility(visibility);
            return this;
        }
        //imageView添加图片
        public Builder addViewImageImage(int imageId){
    
    
            view.findViewById(R.id.dialogImageView).setBackgroundResource(imageId);
            return this;
        }
        //imageButton添加图片
        public Builder addButtonImage(int imageId){
    
    
            view.findViewById(R.id.dialogCancelButton).setBackgroundResource(imageId);
            return this;
        }
        public NoticeDialog build() {
    
    
            if (resStyle != -1) {
    
    
                return new NoticeDialog(this, resStyle);
            } else {
    
    
                return new NoticeDialog(this);
            }
        }
    }
}

二、自定义Dialog的使用

private NoticeDialog noConnectdialog;//定义自定义dialog



NoticeDialog.Builder builder = new NoticeDialog.Builder(FunSelectActivity.this);
noConnectdialog = builder.cancelTouchout(false)
        .view(R.layout.activity_notice_dialog)
        .widthpx(500)
        .heightpx(500)
        .style(R.style.my_dialog)
        .addViewImageImage(R.mipmap.notice_not_connect)
        .addButtonImage(R.mipmap.notice_ok)
        .addViewOnclick(R.id.dialogCancelButton,new View.OnClickListener() {
    
    
            @Override
            public void onClick(View view) {
    
    
                noConnectdialog.dismiss();
                musicEffects.play_music("BUTTON_PRESS");
            }
        }).build();
//为自定义Dialog添加动画
Window window = noConnectdialog.getWindow();
window.setWindowAnimations(R.style.style_dialog);
noConnectdialog.show();

猜你喜欢

转载自blog.csdn.net/qq_15181569/article/details/109253794
今日推荐