Android的各种Dialog

   零零碎碎的一些知识点不知道整理到哪里好些,干脆搬上博客,方便查看,也当做监督自己每天都要有所收获吧,整理的过程也算是梳理思路,自己复习起来也舒心一些。就像一个学长说的,要一次钻研一个知识点,一个萝卜一个坑。对于我自己的做法的话,简单的知识点就像列提纲一样过,别浪费过多精力,难的知识点我会细细咀嚼,用自己通熟易懂语言呈现出来,也希望这个过程中形成自己写博客的风格吧。    

下面进入正题了,昨天花了不少时间整理了一下各种对话框,这也是app经常要与用户交互所要使用到的。

先呈现效果图:

选择对话框 普通对话框 view组件对话框


列表对话框 单选对话框 复选对话框


自定义布局对话框 退出时弹出对话框



然后就是代码和注释:

package com.lanjie.androiddialogtest;

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.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

/**
 * @author Clark Xu 实现多种Dialog
 * 
 */
public class MainActivity extends Activity {
	private Button btn_diaNormal;
	private Button btn_diaView;
	private Button btn_diaList;
	private Button btn_diaSingleChoose;
	private Button btn_diaMultiChoose;
	private Button btn_diaCustom;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		getView();
		setListeners();
	}

	// 养成良好习惯,命名最好易辨识
	public void getView() {
		btn_diaNormal = (Button) findViewById(R.id.btn_diaNormal);
		btn_diaView = (Button) findViewById(R.id.btn_diaView);
		btn_diaList = (Button) findViewById(R.id.btn_diaList);
		btn_diaSingleChoose = (Button) findViewById(R.id.btn_diaSingleChoose);
		btn_diaMultiChoose = (Button) findViewById(R.id.btn_diaMultiChoose);
		btn_diaCustom = (Button) findViewById(R.id.btn_diaCustom);
	}

	public void setListeners() {
		Button button[] = { btn_diaNormal, btn_diaView, btn_diaList,
				btn_diaSingleChoose, btn_diaMultiChoose, btn_diaCustom };
		// 创一个事件处理类
		ButtonListener bl = new ButtonListener();
		for (int i = 0; i < 6; i++) {
			button[i].setOnClickListener(bl);
		}
	}

	class ButtonListener implements android.view.View.OnClickListener {

		// 根据按钮上的文字或者id来辨识按的按钮是哪个
		@Override
		public void onClick(View v) {
			// instanceof的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。
			if (v instanceof Button) {// 如果按了的是Button
				int btnId = v.getId();
				switch (btnId) {
				case R.id.btn_diaNormal:
					showNormalDia();
					break;
				case R.id.btn_diaView:
					showViewDia();
					break;
				case R.id.btn_diaList:
					showListDia();
					break;
				case R.id.btn_diaSingleChoose:
					showSingleDia();
					break;
				case R.id.btn_diaMultiChoose:
					showMultiDia();
					break;
				case R.id.btn_diaCustom:
					showCustomDia();
					break;

				default:
					break;
				}
			}
		}
	}

	// 1.普通对话框(最多有三个按钮)
	public void showNormalDia() {
		final AlertDialog.Builder bui_Normal = new AlertDialog.Builder(
				MainActivity.this);
		// 标题栏:设图标,设标题
		bui_Normal.setIcon(android.R.drawable.btn_star);
		bui_Normal.setTitle("学习调查");
		// 设文本内容
		bui_Normal.setMessage("学习android难不难");
		// 设按钮
		bui_Normal.setPositiveButton("很难", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this, "学习android很难",
						Toast.LENGTH_SHORT).show();
			}
		});
		bui_Normal.setNeutralButton("一般", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this, "学习android难度一般",
						Toast.LENGTH_SHORT).show();
			}
		});
		bui_Normal.setNegativeButton("不难", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				Toast.makeText(MainActivity.this, "学习android不难",
						Toast.LENGTH_SHORT).show();
			}
		});
		// 创建并显示
		bui_Normal.create().show();
	}

	// 2.信息内容是一个简单的View类型(比如输入框类型)的对话框
	public void showViewDia() {
		final AlertDialog.Builder bui_View = new AlertDialog.Builder(
				MainActivity.this);
		bui_View.setTitle("请输入");
		bui_View.setView(new EditText(MainActivity.this));
		bui_View.setPositiveButton("确定", null).setNegativeButton("取消", null);
		bui_View.create().show();
	}

	// 3.列表框
	public void showListDia() {
		final AlertDialog.Builder bui_List = new AlertDialog.Builder(
				MainActivity.this);
		bui_List.setIcon(android.R.drawable.ic_dialog_info);
		bui_List.setTitle("列表框");
		bui_List.setItems(new String[] { "Item1", "Item2", "Item3" },
				new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						switch (which) {// which就是哪个按钮的意思
						case 0:
							Toast.makeText(MainActivity.this, "i am Item1",
									Toast.LENGTH_SHORT).show();
							break;
						case 1:
							Toast.makeText(MainActivity.this, "i am Item2",
									Toast.LENGTH_SHORT).show();
							break;
						case 2:
							Toast.makeText(MainActivity.this, "i am Item3",
									Toast.LENGTH_SHORT).show();
							break;
						}
					}
				});
		bui_List.create().show();
	}

	// 4.单选对话框
	public void showSingleDia() {
		final AlertDialog.Builder bui_Single = new AlertDialog.Builder(
				MainActivity.this);
		bui_Single.setTitle("单选框");
		bui_Single.setIcon(android.R.drawable.ic_dialog_info);
		bui_Single.setSingleChoiceItems(new String[] { "Item1", "Item2",
				"Item3" }, 0, new OnClickListener() {// 第二个参数是初始值(初始被选中的item)

					@Override
					public void onClick(DialogInterface dialog, int which) {
						switch (which) {// which就是哪个按钮的意思
						case 0:
							Toast.makeText(MainActivity.this, "i am Item1",
									Toast.LENGTH_SHORT).show();
							break;
						case 1:
							Toast.makeText(MainActivity.this, "i am Item2",
									Toast.LENGTH_SHORT).show();
							break;
						case 2:
							Toast.makeText(MainActivity.this, "i am Item3",
									Toast.LENGTH_SHORT).show();
							break;
						}
						dialog.dismiss(); // 选完之后就消失
					}
				});
		bui_Single.create().show();
	}

	// 5.复选对话框
	public void showMultiDia() {
		final AlertDialog.Builder bui_Multi = new AlertDialog.Builder(
				MainActivity.this);
		bui_Multi.setTitle("复选框");
		bui_Multi.setIcon(android.R.drawable.ic_dialog_info);
		bui_Multi.setMultiChoiceItems(
				new String[] { "Item1", "Item2", "Item3" }, null,
				new OnMultiChoiceClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which,
							boolean isChecked) {
						// TODO Auto-generated method stub
					}
				});
		bui_Multi.setPositiveButton("确定", null).setNegativeButton("取消", null);
		bui_Multi.create().show();
	}

	// 6.自定义布局的对话框
	public void showCustomDia() {
		LayoutInflater inflater = getLayoutInflater();
		final View layout = inflater.inflate(R.layout.dialog,
				(ViewGroup) findViewById(R.id.dialog));
		final AlertDialog.Builder bui_Custom = new AlertDialog.Builder(
				MainActivity.this);
		bui_Custom.setTitle("自定义布局").setView(layout)
				.setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {//!!注意要在layout里获取editName
						EditText diaInput = (EditText) layout
								.findViewById(R.id.editName);
								
						Toast.makeText(MainActivity.this,
								"名字是" + diaInput.getText().toString(),
								Toast.LENGTH_SHORT).show();
						dialog.dismiss();
					}
				});
		bui_Custom.create().show();
	}

	// 7.按退出时弹出的对话框
	protected void Dialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
		builder.setTitle("提示");// 标题栏
		builder.setMessage("确定退出吗?");// 内容栏
		// 设置按钮(确认按钮positivebutton)
		builder.setPositiveButton("确认", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();// 关闭对话框,释放对话框所占的资源
				MainActivity.this.finish();// 销毁活动
			}
		});
		// 设置按钮(取消按钮negetivewbutton)
		builder.setNegativeButton("取消", new OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				dialog.dismiss();
			}
		});
		builder.create().show();// 布置完之后就显示
	}

	// 捕捉返回键常用方法
	public boolean onKeyDown(int keyCode, KeyEvent event) {

		/*
		 * event.getRepeatCount() ==0这是重复次数。点后退键的时候,
		 * 为了防止点得过快,触发两次后退事件,故做此设置。建议保留这个判断,增强程序健壮性。
		 */
		if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
			Dialog();
		}
		return false;
	}
}

注意:

AlertDialog不能直接通过 new来获取,因为它的构造方法都是受保护的(protected),必须通过

AlertDialog.Builder builder = new AlertDialog.Builder(this);

猜你喜欢

转载自blog.csdn.net/Findingxu/article/details/52315281