Android中AlertDialog使用

1、Dialog简介

Dialog通常是一个小窗口,出现在当前activity的前面。底层的activity失去焦点Dialog接受所有的用户交互。Dialog通常用于通知应用程序的进程应该中断用户和执行任务(如一个进度条或登录提示)

Android应用中,有多种对话框:DialogAlertDialogProgressDialog、时间、日期等对话框,他们之间的继承关系如下:

 

Dialog是一切对话框的基类,通常不应该直接实例化一个Dialog,而应该使用它的子类。Dialog虽然可以在界面上显示,但是并非继承View类。类似于Activity,Dialog也是有生命周期的,它的生命周期由Activity来维护。Activity负责生产,保存,回复它,在生命周期的每个阶段都有一些回调函数供系统方向调用。

2、AlertDialog简介

2.1、AlertDialog概述

AlertDialog标准对话框又叫警告框,是Android系统当中最常用的对话框之一。一个AlertDialog可以有零、一个、两个、三个Button、列表可选项包括复选框或单选按钮。

不能直接通过AlertDialog的构造函数来生成一个AlertDialog,一般生成AlertDialog的时候都是通过它的一个内部静态类AlertDialog.builder来构造的。

AlertDialog的构造方法全部是Protected的,所以不能直接通过new一个AlertDialog来创建出一个AlertDialog。要创建一个AlertDialog,就要用到AlertDialog.Builder中的create()方法。

2.2、AlertDialog的相关方法

使用AlertDialog.Builder创建对话框需要了解以下几个方法:

  setTitle :为对话框设置标题
    setIcon :为对话框设置图标
    setMessage:为对话框设置内容
    setView : 给对话框设置自定义样式
    setItems :设置对话框要显示的一个list,一般用于显示几个命令时
    setMultiChoiceItems :用来设置对话框显示一系列的复选框
    setNeutralButton :普通按钮

  setPositiveButton :给对话框添加"Yes"按钮
    setNegativeButton :对话框添加"No"按钮
    create : 创建对话框

3、AlertDialog的创建

3.1、简单对话框

创建一个只有标题加内容的对话框,比如关于我们

/**
	 * 创建一个简单对话框
	 */
	private void createDialog_1() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("this is title").setMessage("this is Content");
		// 获取AlertDialog
		AlertDialog dialog = builder.create();
		// 显示
		dialog.show();
	}

3.2、带按钮的AlertDialog

创建一个如下图所示的并排按钮的对话框,比如exit时的警告框

/**
	 * 创建带按钮的对话框
	 */
	private void createDialog_2() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setMessage("Are you sure to exit?").setCancelable(false)// 设置不能取消
				.setPositiveButton("yes", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						MainActivity.this.finish();

					}
				}).setNegativeButton("no", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});
		// 获取AlertDialog
		AlertDialog dialog = builder.create();
		// 显示
		dialog.show();
	}

3.3、类似ListView的AlertDialog

使用setItems()创建普通列表对话框比如某人的一些注册信息

/**
	 * 创建单选对话框
	 */
	private void createDialog_3_2() {
		final CharSequence[] items = { "Red", "Green", "Blue" };

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Pick a color");
		builder.setItems(items, new DialogInterface.OnClickListener() {
			public void onClick(DialogInterface dialog, int item) {
				mToast.setText(items[item]);
				mToast.show();
			}
		});
		AlertDialog dialog = builder.create();
		dialog.show();
	}

3.4、类似RadioButton的AlertDialog

使用setSingleChoiceItems()创建单选按钮对话框:

**
	 * 创建单选按钮对话框
	 */
	private void createDialog_3_1() {
		final CharSequence[] items = { "Red", "Green", "Blue" };

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		// -1 表示默认没有选中任何项
		builder.setTitle("Pick a color")
				.setSingleChoiceItems(items, -1, new OnClickListener() {

					public void onClick(DialogInterface dialog, int item) {
						index = item;
					}
				}).setPositiveButton("确定", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						mToast.setText(items[index]);
						mToast.show();
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});
		AlertDialog dialog = builder.create();
		dialog.show();
	}

3.5、类似CheckBox的AlertDialog

使用setMultiChoiceItems()创建单选按钮对话框:

private void createDialog_4() {
		final CharSequence[] items = { "Red", "Green", "Blue" };
		final boolean[] itemsSelected = { false, false, false };

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Pick a color")
				// 设置对话框显示一个复选List,指定默认选中项,同时设置监听事件处理
				.setMultiChoiceItems(items, itemsSelected,
						new OnMultiChoiceClickListener() {

							@Override
							public void onClick(DialogInterface dialog,
									int which, boolean isChecked) {
								// 设置选中项
								itemsSelected[which] = isChecked;
							}
						}).setPositiveButton("确定", new OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						StringBuilder stringBuilder = new StringBuilder();
						for (int i = 0; i < itemsSelected.length; i++) {
							if (itemsSelected[i] == true) {
								stringBuilder.append(items[i] + "、");
							}
							mToast.setText("你选中了" + stringBuilder.toString());
							mToast.show();
						}
					}
				}).setNegativeButton("取消", new OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						dialog.cancel();
					}
				});
		AlertDialog dialog = builder.create();
		dialog.show();
	}

4、自定义AlertDialog

由于系统默认对话框样式是固定、统一的,而在实际开发过程中,往往根据应用不同,可能会有不同的布局或者配色,那么就需要我们自定义对话框了。

如何自定义一个对话框呢?下面给出了三种方式。

3.1、修改系统默认的Dialog样式(风格、主题)

 

3.2、自定义Dialog布局文件

使用这种方式自定义dialog只需创建一个dialog的布局文件,然后使用buildersetView()方法设置该布局文件即可。

1、创建自定义的dialog布局文件custom_dialog.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/layout_dialog"
    android:orientation="vertical" >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#FFFFBB33"
        android:contentDescription="@string/app_name"
        android:scaleType="center"
        android:src="@drawable/ic_launcher" />

    <EditText
        android:id="@+id/et_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="5dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:hint="请输入用户名"
        android:inputType="textEmailAddress" />

    <EditText
        android:id="@+id/et_pwd"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:fontFamily="sans-serif"
        android:hint="请输入密码"
        android:inputType="textPassword" />

</LinearLayout>

2、使用BuilderLayoutInflater显示dialog

private void createDialog_5() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		// LayoutInflater layoutInflater = this.getLayoutInflater();
		LayoutInflater layoutInflater = (LayoutInflater) this
				.getSystemService(LAYOUT_INFLATER_SERVICE);
		View view = layoutInflater.inflate(R.layout.custom_dialog, null);
		builder.setView(view)
				// Add action buttons
				.setPositiveButton("登录", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int id) {
						mToast.setText("这里写登录成功的处理");
						mToast.show();						
					}
				})
				.setNegativeButton("取消", new DialogInterface.OnClickListener() {
					public void onClick(DialogInterface dialog, int id) {
						mToast.setText("取消");
						mToast.show();		
					}
				});
		AlertDialog dialog = builder.create();
		// show
		dialog.show();
	}

3.3、自定义Dialog的子类

使用该方法定义dialog需创建Dialog的子类,然后重写其构造函数,并根据实际要求添加额外的功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值