采用建造者模式自定义对话框

Posted zhongyinghe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了采用建造者模式自定义对话框相关的知识,希望对你有一定的参考价值。

1、对话框视图

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="300dip"
 4     android:layout_height="240dip"
 5     android:orientation="vertical" >
 6     <LinearLayout 
 7         android:layout_width="match_parent"
 8         android:layout_height="200dip"
 9         android:orientation="vertical"
10         >
11         <TextView
12             android:id="@+id/tv_title"
13             android:layout_width="match_parent"
14             android:layout_height="50dip"
15             android:gravity="center"
16             android:background="#00ff00"
17             android:text="提示" />
18         <TextView 
19             android:id="@+id/tv_message"
20             android:layout_width="match_parent"
21             android:layout_height="150dip"
22             android:gravity="center"
23             android:text="对话框"
24             />
25     </LinearLayout>
26 
27     <LinearLayout
28         android:layout_width="match_parent"
29         android:layout_height="fill_parent"
30         android:orientation="horizontal"
31          >
32 
33         <Button 
34             android:id="@+id/btn_confirm"
35             android:layout_width="0dip"
36             android:layout_height="wrap_content"
37             android:layout_weight="1"
38             android:text="确定"
39             />
40         <Button 
41             android:id="@+id/btn_cancel"
42             android:layout_width="0dip"
43             android:layout_height="wrap_content"
44             android:layout_weight="1"
45             android:text="取消"
46             />
47     </LinearLayout>
48 </LinearLayout>

2、对话框Theme

1 <style name="zyhDialog" parent="@android:style/Theme.DeviceDefault.Light.Dialog">
2          <item name="android:windowFrame">@null</item>
3          <item name="android:windowNoTitle">true</item>
4          <item name="android:windowIsTranslucent">true</item>
5          <item name="android:backgroundDimEnabled">false</item>
6     </style>

3、MainActivity

 1 package com.zyhui.zyh_dialog;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.content.DialogInterface;
 6 import android.view.Menu;
 7 import android.view.View;
 8 import android.widget.Toast;
 9 
10 public class MainActivity extends Activity {
11     private ZyhDialog zyhDialog;
12     @Override
13     protected void onCreate(Bundle savedInstanceState) {
14         super.onCreate(savedInstanceState);
15         setContentView(R.layout.activity_main);
16     }
17 
18     public void click(View v){
19         ZyhDialog.Builder builder = new ZyhDialog.Builder(this);
20         builder.setTitle("我是dialog的标题 ");
21         builder.setMessage("我是消息内容");
22         builder.setConfirmButton("确定", new DialogInterface.OnClickListener(){
23             @Override
24             public void onClick(DialogInterface dialog, int which) {
25                 Toast.makeText(MainActivity.this, "我点击了确定按钮", Toast.LENGTH_SHORT).show();
26             }});
27         builder.setCancelButton("取消", new DialogInterface.OnClickListener(){
28             @Override
29             public void onClick(DialogInterface dialog, int which) {
30                 Toast.makeText(MainActivity.this, "我点击了取消按钮", Toast.LENGTH_SHORT).show();
31             }
32         });
33         
34         zyhDialog = builder.create();
35         zyhDialog.setCancelable(false);
36         zyhDialog.show();
37     }
38     
39 }

4、自定义对话框类

  1 package com.zyhui.zyh_dialog;
  2 
  3 import android.app.Dialog;
  4 import android.content.Context;
  5 import android.content.DialogInterface;
  6 import android.view.View;
  7 import android.view.ViewGroup.LayoutParams;
  8 import android.widget.Button;
  9 import android.widget.TextView;
 10 
 11 public class ZyhDialog extends Dialog {
 12 
 13     public ZyhDialog(Context context, boolean cancelable,
 14             OnCancelListener cancelListener) {
 15         super(context, cancelable, cancelListener);
 16     }
 17 
 18     public ZyhDialog(Context context, int theme) {
 19         super(context, theme);
 20     }
 21 
 22     public ZyhDialog(Context context) {
 23         super(context);
 24     }
 25     
 26     public static class Builder{
 27         private Context context;
 28         
 29         private String title="提示";
 30         private String message="是否确定";
 31         private String confirmText="确定";
 32         private String cancelText="取消";
 33         private DialogInterface.OnClickListener confirmListener;//确认点击事件
 34         private DialogInterface.OnClickListener cancelListener;//取消点击事件
 35         private View dialogView;//对话框视图
 36         
 37         public Builder(Context context){
 38             this.context = context;
 39         }
 40 
 41         public String getTitle() {
 42             return title;
 43         }
 44 
 45         public Builder setTitle(String title) {
 46             this.title = title;
 47             return this;
 48         }
 49 
 50         public String getMessage() {
 51             return message;
 52         }
 53 
 54         public Builder setMessage(String message) {
 55             this.message = message;
 56             return this;
 57         }
 58         //设置确定按钮
 59         public Builder setConfirmButton(String confirmText, DialogInterface.OnClickListener listener){
 60             this.confirmText = confirmText;
 61             this.confirmListener = listener;
 62             return this;
 63         }
 64         
 65         //设置取消按钮
 66         public Builder setCancelButton(String cancelText, DialogInterface.OnClickListener listener){
 67             this.cancelText = cancelText;
 68             this.cancelListener = listener;
 69             return this;
 70         }
 71         
 72         //构建Dialog
 73         public ZyhDialog create(){
 74             dialogView = View.inflate(context, R.layout.zyh_dialog, null);
 75             final ZyhDialog zyhDialog = new ZyhDialog(context,R.style.zyhDialog);
 76             zyhDialog.setContentView(dialogView, new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT));
 77             TextView tv_title = (TextView) dialogView.findViewById(R.id.tv_title);
 78             tv_title.setText(getTitle());
 79             TextView tv_message = (TextView) dialogView.findViewById(R.id.tv_message);
 80             tv_message.setText(getMessage());
 81             
 82             Button btn_confirm = (Button) dialogView.findViewById(R.id.btn_confirm);
 83             btn_confirm.setText(confirmText);
 84             if(confirmListener != null){
 85                 btn_confirm.setOnClickListener(new View.OnClickListener() {
 86                     @Override
 87                     public void onClick(View v) {
 88                         confirmListener.onClick(zyhDialog, DialogInterface.BUTTON_POSITIVE);
 89                         zyhDialog.dismiss();
 90                     }
 91                 });
 92             }else{
 93                 btn_confirm.setVisibility(View.GONE);
 94             }
 95             
 96             Button btn_cancel = (Button) dialogView.findViewById(R.id.btn_cancel);
 97             btn_cancel.setText(cancelText);
 98             if(cancelListener != null){
 99                 btn_cancel.setOnClickListener(new View.OnClickListener() {
100                     @Override
101                     public void onClick(View v) {
102                         cancelListener.onClick(zyhDialog, DialogInterface.BUTTON_NEGATIVE);
103                         zyhDialog.dismiss();
104                     }
105                 });
106             }else{
107                 btn_cancel.setVisibility(View.GONE);
108             }
109             return zyhDialog;
110         }
111     }
112 
113 }

 

以上是关于采用建造者模式自定义对话框的主要内容,如果未能解决你的问题,请参考以下文章

设计模式建造者模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

大话设计模式-建造者模式

创建型模式之建造者模式

建造者模式(Builder)

建造者模式

第十三章-建造者模式