1.自定义的CustomDialog.java
1 package com.example.iosalertview; 2 3 import android.app.Dialog; 4 import android.content.Context; 5 import android.content.DialogInterface; 6 import android.view.Gravity; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.ViewGroup.LayoutParams; 10 import android.widget.Button; 11 import android.widget.LinearLayout; 12 import android.widget.TextView; 13 14 public class CustomDialog extends Dialog { 15 16 public CustomDialog(Context context) { 17 super(context); 18 } 19 20 public CustomDialog(Context context, int theme) { 21 super(context, theme); 22 } 23 24 public static class Builder { 25 private Context context; // 上下文对象 26 private String title; // 对话框标题 27 private String message; // 对话框内容 28 private String confirm_btnText; // 按钮名称“确定” 29 private String cancel_btnText; // 按钮名称“取消” 30 private String neutral_btnText; // 按钮名称“隐藏” 31 private View contentView; // 对话框中间加载的其他布局界面 32 /* 按钮坚挺事件 */ 33 private DialogInterface.OnClickListener confirm_btnClickListener; 34 private DialogInterface.OnClickListener cancel_btnClickListener; 35 private DialogInterface.OnClickListener neutral_btnClickListener; 36 37 public Builder(Context context) { 38 this.context = context; 39 } 40 41 /* 设置对话框信息 */ 42 public Builder setMessage(String message) { 43 this.message = message; 44 return this; 45 } 46 47 /** 48 * Set the Dialog message from resource 49 * 50 * @param title 51 * @return 52 */ 53 public Builder setMessage(int message) { 54 this.message = (String) context.getText(message); 55 return this; 56 } 57 58 /** 59 * Set the Dialog title from resource 60 * 61 * @param title 62 * @return 63 */ 64 public Builder setTitle(int title) { 65 this.title = (String) context.getText(title); 66 return this; 67 } 68 69 /** 70 * Set the Dialog title from String 71 * 72 * @param title 73 * @return 74 */ 75 public Builder setTitle(String title) { 76 this.title = title; 77 return this; 78 } 79 80 /** 81 * 设置对话框界面 82 * 83 * @param v 84 * View 85 * @return 86 */ 87 public Builder setContentView(View v) { 88 this.contentView = v; 89 return this; 90 } 91 92 /** 93 * Set the positive button resource and it's listener 94 * 95 * @param confirm_btnText 96 * @return 97 */ 98 public Builder setPositiveButton(int confirm_btnText, 99 DialogInterface.OnClickListener listener) { 100 this.confirm_btnText = (String) context.getText(confirm_btnText); 101 this.confirm_btnClickListener = listener; 102 return this; 103 } 104 105 /** 106 * Set the positive button and it's listener 107 * 108 * @param confirm_btnText 109 * @return 110 */ 111 public Builder setPositiveButton(String confirm_btnText, 112 DialogInterface.OnClickListener listener) { 113 this.confirm_btnText = confirm_btnText; 114 this.confirm_btnClickListener = listener; 115 return this; 116 } 117 118 /** 119 * Set the negative button resource and it's listener 120 * 121 * @param confirm_btnText 122 * @return 123 */ 124 public Builder setNegativeButton(int cancel_btnText, 125 DialogInterface.OnClickListener listener) { 126 this.cancel_btnText = (String) context.getText(cancel_btnText); 127 this.cancel_btnClickListener = listener; 128 return this; 129 } 130 131 /** 132 * Set the negative button and it's listener 133 * 134 * @param confirm_btnText 135 * @return 136 */ 137 public Builder setNegativeButton(String cancel_btnText, 138 DialogInterface.OnClickListener listener) { 139 this.cancel_btnText = cancel_btnText; 140 this.cancel_btnClickListener = listener; 141 return this; 142 } 143 144 /** 145 * Set the netural button resource and it's listener 146 * 147 * @param confirm_btnText 148 * @return 149 */ 150 public Builder setNeutralButton(int neutral_btnText, 151 DialogInterface.OnClickListener listener) { 152 this.neutral_btnText = (String) context.getText(neutral_btnText); 153 this.neutral_btnClickListener = listener; 154 return this; 155 } 156 157 /** 158 * Set the netural button and it's listener 159 * 160 * @param confirm_btnText 161 * @return 162 */ 163 public Builder setNeutralButton(String neutral_btnText, 164 DialogInterface.OnClickListener listener) { 165 this.neutral_btnText = neutral_btnText; 166 this.neutral_btnClickListener = listener; 167 return this; 168 } 169 170 public CustomDialog create() { 171 LayoutInflater inflater = (LayoutInflater) context 172 .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 173 // instantiate the dialog with the custom Theme 174 final CustomDialog dialog = new CustomDialog(context, 175 R.style.mystyle); 176 View layout = inflater.inflate(R.layout.customdialog, null); 177 dialog.addContentView(layout, new LayoutParams( 178 LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); 179 // set the dialog title 180 ((TextView) layout.findViewById(R.id.title)).setText(title); 181 ((TextView) layout.findViewById(R.id.title)).getPaint() 182 .setFakeBoldText(true); 183 184 if (title == null || title.trim().length() == 0) { 185 ((TextView) layout.findViewById(R.id.message)) 186 .setGravity(Gravity.CENTER); 187 } 188 189 if (neutral_btnText != null && confirm_btnText != null 190 && cancel_btnText != null) { 191 ((Button) layout.findViewById(R.id.confirm_btn)) 192 .setText(confirm_btnText); 193 if (neutral_btnClickListener != null) { 194 ((Button) layout.findViewById(R.id.neutral_btn)) 195 .setOnClickListener(new View.OnClickListener() { 196 public void onClick(View v) { 197 neutral_btnClickListener.onClick(dialog, 198 DialogInterface.BUTTON_NEUTRAL); 199 } 200 }); 201 } else { 202 ((Button) layout.findViewById(R.id.neutral_btn)) 203 .setOnClickListener(new View.OnClickListener() { 204 205 @Override 206 public void onClick(View v) { 207 dialog.dismiss(); 208 } 209 }); 210 } 211 } else { 212 // if no confirm button or cancle button or neutral just set the 213 // visibility to GONE 214 layout.findViewById(R.id.neutral_btn).setVisibility(View.GONE); 215 layout.findViewById(R.id.single_line).setVisibility(View.GONE); 216 } 217 // set the confirm button 218 if (confirm_btnText != null) { 219 ((Button) layout.findViewById(R.id.confirm_btn)) 220 .setText(confirm_btnText); 221 if (confirm_btnClickListener != null) { 222 ((Button) layout.findViewById(R.id.confirm_btn)) 223 .setOnClickListener(new View.OnClickListener() { 224 public void onClick(View v) { 225 confirm_btnClickListener.onClick(dialog, 226 DialogInterface.BUTTON_POSITIVE); 227 } 228 }); 229 } else { 230 ((Button) layout.findViewById(R.id.confirm_btn)) 231 .setOnClickListener(new View.OnClickListener() { 232 233 @Override 234 public void onClick(View v) { 235 dialog.dismiss(); 236 } 237 }); 238 } 239 } else { 240 // if no confirm button just set the visibility to GONE 241 layout.findViewById(R.id.confirm_btn).setVisibility(View.GONE); 242 layout.findViewById(R.id.second_line).setVisibility(View.GONE); 243 layout.findViewById(R.id.cancel_btn).setBackgroundResource( 244 R.drawable.single_btn_select); 245 } 246 // set the cancel button 247 if (cancel_btnText != null) { 248 ((Button) layout.findViewById(R.id.cancel_btn)) 249 .setText(cancel_btnText); 250 if (cancel_btnClickListener != null) { 251 ((Button) layout.findViewById(R.id.cancel_btn)) 252 .setOnClickListener(new View.OnClickListener() { 253 public void onClick(View v) { 254 cancel_btnClickListener.onClick(dialog, 255 DialogInterface.BUTTON_NEGATIVE); 256 } 257 }); 258 } else { 259 ((Button) layout.findViewById(R.id.cancel_btn)) 260 .setOnClickListener(new View.OnClickListener() { 261 262 @Override 263 public void onClick(View v) { 264 dialog.dismiss(); 265 } 266 }); 267 } 268 } else { 269 // if no cancel button just set the visibility to GONE 270 layout.findViewById(R.id.cancel_btn).setVisibility(View.GONE); 271 layout.findViewById(R.id.second_line).setVisibility(View.GONE); 272 layout.findViewById(R.id.confirm_btn).setBackgroundResource( 273 R.drawable.single_btn_select); 274 } 275 // set the content message 276 if (message != null) { 277 ((TextView) layout.findViewById(R.id.message)).setText(message); 278 } else if (contentView != null) { 279 // if no message set 280 // add the contentView to the dialog body 281 ((LinearLayout) layout.findViewById(R.id.message)) 282 .removeAllViews(); 283 ((LinearLayout) layout.findViewById(R.id.message)).addView( 284 contentView, new LayoutParams( 285 LayoutParams.WRAP_CONTENT, 286 LayoutParams.WRAP_CONTENT)); 287 } 288 dialog.setContentView(layout); 289 return dialog; 290 } 291 292 } 293 }