浅谈Builder设计模式

1.Builder设计模式的特点
1)所有的set方法必须返回当前对象
2)连续调用
2.为什么这么设计?
1)节约资源
2)方便多次设置数据
3)方便组合不同的对象
4)不需要创建引用就可以set数据
OK,扯完了上面这些东西之后,我们来仿照系统源码,按照谷歌工程师的思路,自定义我们的dialog。这个自定义的dialog的步骤有三:
一,让MyCustomDialog继承Dialog;
二,需要提供两个静态内部类:Params和Builder。在Params中定义上下文context,标题文字title,消息内容message,确定按钮文本confirmText,取消按钮文本cancelText,确定按钮的监听onConfirmClickListener,取消按钮的监听onCancelClickListener。Builder类中,提供以上params的set方法,返回当前对象this。代码示例:

        public Builder setTitle(String title){
            params.title = title;
            return this;
        }
        public Builder setMessage(String message){
            params.message = message;
            return this;
        }

三,提供自定义dialog的创建方法create(),返回myCustomDialog。这个方法也分三个步骤:
1)首先我们的自定义dialog需要布局,写一个布局文件mycustom_dialog_layout,这里就自由发挥了,本文还是使用常规的dialog布局。类似下图:
这里写图片描述
加载布局:

View view = LayoutInflater.from(params.context).inflate(R.layout.mycustom_dialog_layout,null);

2)把params的东西都初始化一下,设置标题示例如下:

//设置标题
TextView titleTV = (TextView) view.findViewById(R.id.tv_title);
if (!TextUtils.isEmpty(params.title)){
     titleTV.setText(params.title);
     titleTV.setVisibility(View.VISIBLE);
 }else{
       titleTV.setVisibility(View.GONE);
 }

其他的都可以画瓢式地码出来。
3)把视图绑定到dialog上。

myCustomerDialog.setContentView(view);

自定义的dialog到此就写好了。然后我们在MainActivity中,像使用AlertDialog一样使用它。

MyCustomerDialog.Builder builder = new MyCustomerDialog.Builder(this);
        builder.setTitle("温馨提示").setMessage("你确定要退出吗?").setConfirmText("确定").setOnConfirmClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"已退出",Toast.LENGTH_LONG).show();
                myCustomerDialog.dismiss();
            }
        }).setCancelText("取消").setOnCancelClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                myCustomerDialog.dismiss();
            }
        });
        myCustomerDialog = builder.create();
        myCustomerDialog.show();

最后,在styles.xml中添加以下代码,去除边框。

<item name="android:windowFrame">@null</item>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值