Android开发之AlertDialog跟自定义AlertDialog

Android开发之AlertDialog和自定义AlertDialog

Android为我们提供了很多种AlertDialog,当前我们也可以定制自己需要的Dialog;下面就是Android为我们提供的AlertDialog

1、显示带取消、中立和确定按钮的对话框

Android开发之AlertDialog跟自定义AlertDialog


2、显示带列表的对话框

Android开发之AlertDialog跟自定义AlertDialog


3、显示带多选列表项的对话框

Android开发之AlertDialog跟自定义AlertDialog


4、显示带单选列表项的对话框

Android开发之AlertDialog跟自定义AlertDialog


5、显示带图标列表的对话框

Android开发之AlertDialog跟自定义AlertDialog


6、简单消息框 只有一个确定按钮

Android开发之AlertDialog跟自定义AlertDialog


7、带文件输入框对话框

Android开发之AlertDialog跟自定义AlertDialog


8、自定义对话框

Android开发之AlertDialog跟自定义AlertDialog


MainActivity.java的代码

package com.example.alertdialogdemo;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.DialogInterface.OnMultiChoiceClickListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SimpleAdapter;
import android.widget.Toast;

/**
 * 各种警告提示框
 * 
 * @author Administrator
 * 
 */
public class MainActivity extends Activity {

	private Button btn1 = null;
	private Button btn2 = null;
	private Button btn3 = null;
	private Button btn4 = null;
	private Button btn5 = null;
	private Button btn6 = null;
	private Button btn7 = null;
	private Button btn8 = null;
	private Button btn9 = null;

	private boolean[] checkedItems; // 记录列表项的状态
	private String[] items; // 各列表要显示的内容

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btn1 = (Button) findViewById(R.id.btn1);
		btn2 = (Button) findViewById(R.id.btn2);
		btn3 = (Button) findViewById(R.id.btn3);
		btn4 = (Button) findViewById(R.id.btn4);
		btn5 = (Button) findViewById(R.id.btn5);
		btn6 = (Button) findViewById(R.id.btn6);
		btn7 = (Button) findViewById(R.id.btn7);
		btn8 = (Button) findViewById(R.id.btn8);
		btn9 = (Button) findViewById(R.id.btn9);

		int[] imageid = new int[] { R.drawable.icon1, R.drawable.icon2,
				R.drawable.icon3, R.drawable.icon4 };
		final String[] title = new String[] { "item1", "item2", "item3",
				"item4" };
		// 定义一个List集合
		List<Map<String, Object>> listItems = new ArrayList<Map<String, Object>>();
		for (int i = 0; i < imageid.length; i++) {
			Map<String, Object> map = new HashMap<String, Object>();
			map.put("image", imageid[i]);
			map.put("title", title[i]);
			listItems.add(map);
		}
		final SimpleAdapter adapter = new SimpleAdapter(this, listItems,
				R.layout.items, new String[] { "title", "image" }, new int[] {
						R.id.title, R.id.image });
		/**
		 * 显示带取消、中立和确定按钮的对话框
		 */
		btn1.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				AlertDialog alert = new AlertDialog.Builder(MainActivity.this)
						.create();
				// 设置对话框的图标
				alert.setIcon(R.drawable.ic_launcher);
				// 设置对话框的标题
				alert.setTitle("提示框: ");
				// 设置要显示的内容
				alert.setMessage("带取消、中立和确定按钮的对话框!");
				// 添加“取消”按钮监听事件
				alert.setButton(DialogInterface.BUTTON_NEGATIVE, "取消",
						new OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								Toast.makeText(MainActivity.this, "你点了取消按钮",
										Toast.LENGTH_LONG).show();
							}
						});
				// 添加“确定”按钮监听事件
				alert.setButton(DialogInterface.BUTTON_POSITIVE, "确定",
						new OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								Toast.makeText(MainActivity.this, "你点了确定按钮",
										Toast.LENGTH_LONG).show();
							}
						});
				// 添加“中立”按钮监听事件
				alert.setButton(DialogInterface.BUTTON_NEUTRAL, "中立",
						new OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								Toast.makeText(MainActivity.this, "你点了中立按钮",
										Toast.LENGTH_LONG).show();
							}
						});
				// 显示对话框
				alert.show();
			}
		});

		/**
		 * 显示带列表的对话框
		 */
		btn2.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				final String[] items = new String[] { "篮球", "溜冰", "跑步", "游泳",
						"羽毛球" };
				Builder builder = new AlertDialog.Builder(MainActivity.this);
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle("请选择你喜欢的运动:");
				// 添加列表项
				builder.setItems(items, new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this,
								"你选择了  " + items[which], Toast.LENGTH_LONG)
								.show();
					}
				});
				builder.create().show();
			}
		});

		/**
		 * 显示带多选列表项的对话框
		 */
		btn3.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 记录列表的状态
				checkedItems = new boolean[] { false, true, false, true, false };
				// 列表要显示的内容
				items = new String[] { "开心农场", "俄罗斯方块", "城市猎人", "斗地主", "麻将" };

				Builder builder = new AlertDialog.Builder(MainActivity.this);
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle("您喜欢的游戏是:");
				builder.setMultiChoiceItems(items, checkedItems,
						new OnMultiChoiceClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which, boolean isChecked) {
								// TODO Auto-generated method stub
								checkedItems[which] = isChecked;
							}
						});
				// 添加“确定”按钮的监听器
				builder.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						String result = "";
						for (int index = 0; index < checkedItems.length; index++) {
							if (checkedItems[index]) {
								result += items[index] + "--";
							}
						}
						// 不为空时提示用户的选择
						if (!result.equals("")) {
							Toast.makeText(MainActivity.this, result,
									Toast.LENGTH_LONG).show();
						}
					}
				});
				builder.create().show();
			}
		});

		/**
		 * 显示带单选列表项的对话框
		 */
		btn4.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				final String[] items = new String[] { "北京", "广州", "深圳", "上海" };
				Builder builder = new AlertDialog.Builder(MainActivity.this);
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle("请选择你所在的城市:");
				builder.setSingleChoiceItems(items, 0, new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this,
								"您选择了" + items[which], Toast.LENGTH_LONG)
								.show();
					}
				});
				builder.setPositiveButton("确定", null);
				// 创建并显示对话框
				builder.create().show();
			}
		});

		/**
		 * 显示带图标列表的对话框
		 */
		btn5.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Builder builder = new AlertDialog.Builder(MainActivity.this);
				builder.setIcon(R.drawable.ic_launcher);
				builder.setTitle("设置:");
				// 添加列表适配器
				builder.setAdapter(adapter, new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this,
								"您选择了" + items[which], Toast.LENGTH_LONG)
								.show();
					}
				});
				builder.create().show();
			}
		});

		/**
		 * 简单消息框 只有一个确定按钮
		 */
		btn6.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new AlertDialog.Builder(MainActivity.this).setTitle("标题")
						.setMessage("简单消息框")
						.setIcon(android.R.drawable.ic_dialog_info)
						.setPositiveButton("确定", new OnClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which) {
								// TODO Auto-generated method stub
								Toast.makeText(MainActivity.this, "您选择了确定按钮",
										Toast.LENGTH_LONG).show();
							}
						}).show();
			}
		});

		/**
		 * 带文件输入框对话框
		 */
		btn7.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				Builder builder = new AlertDialog.Builder(MainActivity.this);
				builder.setTitle("请输入:");
				builder.setIcon(android.R.drawable.alert_dark_frame);
				builder.setView(new EditText(MainActivity.this));
				builder.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this, "您选择了确定按钮",
								Toast.LENGTH_LONG).show();
					}
				});
				builder.setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						Toast.makeText(MainActivity.this, "您选择了取消按钮",
								Toast.LENGTH_LONG).show();
					}
				});
				builder.create().show();
			}
		});

		/**
		 * 自定义对话框
		 */
		btn8.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				CustomDialog.Builder customBuilder = new CustomDialog.Builder(
						MainActivity.this);
				customBuilder
						.setTitle("Custom title")
						.setMessage("Custom body")
						.setNegativeButton("Cancel",
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										System.out.println("cancel-" + which);
										Toast.makeText(MainActivity.this,
												"您选择了取消按钮", Toast.LENGTH_LONG)
												.show();
										dialog.cancel();
									}
								})
						.setPositiveButton("Confirm",
								new DialogInterface.OnClickListener() {
									public void onClick(DialogInterface dialog,
											int which) {
										System.out.println("Confirm-" + which);
										Toast.makeText(MainActivity.this,
												"您选择了确定按钮", Toast.LENGTH_LONG)
												.show();
										dialog.dismiss();
									}
								});
				customBuilder.create().show();
			}
		});

		btn9.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

			}
		});
	}
}

自定义Dialog代码CustomDialog.java

package com.example.alertdialogdemo;

import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * 定制提示框
 * 
 * @author Administrator
 * 
 */
public class CustomDialog extends Dialog {

	public CustomDialog(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public CustomDialog(Context context, int theme) {
		super(context, theme);
	}

	public static class Builder {
		private Context context;
		private String title;
		private String message;
		private String positiveButtonText;
		private String negativeButtonText;
		private View contentView;

		private DialogInterface.OnClickListener positiveButtonClickListener,
				negativeButtonClickListener;

		public Builder(Context context) {
			this.context = context;
		}

		/**
		 * 设置对话框的文本
		 * 
		 * @param title
		 * @return
		 */
		public Builder setMessage(String message) {
			this.message = message;
			return this;
		}

		/**
		 * 通过资源文件设置对话框的文本
		 * 
		 * @param title
		 * @return
		 */
		public Builder setMessage(int message) {
			this.message = (String) context.getText(message);
			return this;
		}

		/**
		 * 通过资源文件设置对话框的标题
		 * 
		 * @param title
		 * @return
		 */
		public Builder setTitle(int title) {
			this.title = (String) context.getText(title);
			return this;
		}

		/**
		 * 设置对话框的标题
		 * 
		 * @param title
		 * @return
		 */
		public Builder setTitle(String title) {
			this.title = title;
			return this;
		}

		/**
		 * Set a custom content view for the Dialog. If a message is set, the
		 * contentView is not added to the Dialog...
		 * 
		 * @param v
		 * @return
		 */
		public Builder setContentView(View v) {
			this.contentView = v;
			return this;
		}

		/**
		 * 设置确定按钮的标题和监听器
		 * 
		 * @param positiveButtonText
		 * @param listener
		 * @return
		 */
		public Builder setPositiveButton(int positiveButtonText,
				DialogInterface.OnClickListener listener) {
			this.positiveButtonText = (String) context
					.getText(positiveButtonText);
			this.positiveButtonClickListener = listener;
			return this;
		}

		/**
		 * 设置确定按钮的标题和监听器
		 * 
		 * @param positiveButtonText
		 * @param listener
		 * @return
		 */
		public Builder setPositiveButton(String positiveButtonText,
				DialogInterface.OnClickListener listener) {
			this.positiveButtonText = positiveButtonText;
			this.positiveButtonClickListener = listener;
			return this;
		}

		/**
		 * 设置取消按钮的标题和监听器
		 * 
		 * @param negativeButtonText
		 * @param listener
		 * @return
		 */
		public Builder setNegativeButton(int negativeButtonText,
				DialogInterface.OnClickListener listener) {
			this.negativeButtonText = (String) context
					.getText(negativeButtonText);
			this.negativeButtonClickListener = listener;
			return this;
		}

		/**
		 * 设置取消按钮的标题和监听器
		 * 
		 * @param negativeButtonText
		 * @param listener
		 * @return
		 */
		public Builder setNegativeButton(String negativeButtonText,
				DialogInterface.OnClickListener listener) {
			this.negativeButtonText = negativeButtonText;
			this.negativeButtonClickListener = listener;
			return this;
		}

		/**
		 * 创建定制的对话框
		 */
		public CustomDialog create() {
			LayoutInflater inflater = (LayoutInflater) context
					.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
			// 创建指定样式的对话框
			final CustomDialog dialog = new CustomDialog(context,
					R.style.Dialog);
			// 获取对话框的布局
			View layout = inflater.inflate(R.layout.dialog, null);
			// 为对话框添加布局和设置大小
			dialog.addContentView(layout, new LayoutParams(
					LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
			// 设置对话框的标题
			((TextView) layout.findViewById(R.id.title)).setText(title);
			// 设置确定按钮
			if (positiveButtonText != null) {
				// 如果有文本设置按钮的文本
				((Button) layout.findViewById(R.id.positiveButton))
						.setText(positiveButtonText);
				if (positiveButtonClickListener != null) {
					// 设置按钮的监听器
					((Button) layout.findViewById(R.id.positiveButton))
							.setOnClickListener(new View.OnClickListener() {
								public void onClick(View v) {
									positiveButtonClickListener.onClick(dialog,
											DialogInterface.BUTTON_POSITIVE);
								}
							});
				}
			} else {
				// 如果没有文本就设置按钮不可见
				layout.findViewById(R.id.positiveButton).setVisibility(
						View.GONE);
			}
			// 设置取消按钮
			if (negativeButtonText != null) {
				((Button) layout.findViewById(R.id.negativeButton))
						.setText(negativeButtonText);
				if (negativeButtonClickListener != null) {
					//设置按钮监听器
					((Button) layout.findViewById(R.id.negativeButton))
							.setOnClickListener(new View.OnClickListener() {
								public void onClick(View v) {
									negativeButtonClickListener.onClick(dialog,
											DialogInterface.BUTTON_NEGATIVE);
								}
							});
				}
			} else {
				// 如果没有文本就设置按钮不可见
				layout.findViewById(R.id.negativeButton).setVisibility(
						View.GONE);
			}
			// 显示文本内容
			if (message != null) {
				((TextView) layout.findViewById(R.id.message)).setText(message);
			} else if (contentView != null) {
				// if no message set
				// add the contentView to the dialog body
				((LinearLayout) layout.findViewById(R.id.content))
						.removeAllViews();
				((LinearLayout) layout.findViewById(R.id.content)).addView(
						contentView, new LayoutParams(
								LayoutParams.WRAP_CONTENT,
								LayoutParams.WRAP_CONTENT));
			}
			dialog.setContentView(layout);
			return dialog;
		}
	}

}


需要添加自定义对话框的布局文件和对话框theme、styles

Android开发之AlertDialog跟自定义AlertDialog


这里就不一一贴出来了,需要的可以到以下地址下载

点击打开链接