Android AlertDialog使用

AlertDialog对话框概述

  • AlertDialog对话框用于提示一些重要信息或显示一些需要用户额外交互的内容。它一般以小窗口的形式展示在界面上。使用AlertDialog创建的对话框一般标题内容按钮三个区域。
  • 结构图

创建AlertDialog对话框步骤

  1. 调用AlertDialog的静态内部类Builder创建AlertDialog.Builder的对象。
  2. 调用AlertDialog.Builder的setTitle()setIcon()方法分别设置AlertDialog对话框的标题名称和图标
  3. 调用AlertDialog.BuildersetMessage()setSingleChoiceItems()或者setMultiChoiceltems()方法设置AlertDialog对话框的内容为简单文本,单选列表或者为多选列表。
  4. 调用AlertDialog.BuildersetPositiveButton()setNegativeButton()方法设置AlertDialog对话框的确定和取消按钮。
  5. 调用AlertDialog.Builder的create()方法创建AlertDialog对象。
  6. 调用AlertDialog对象的show()方法显示该对话框。
  7. 调用AlertDialog对象的dismiss()方法取消对话框。

普通对话框

普通对话框的内容区域一般显示简单的文本信息。通过setMessage()方法来设置。

// 声明对象
AlertDialog dialog;
// 绑定当前窗口
dialog= new AlertDialog.Builder(this)
// 设置标题
.setTitle("标题")
// 设置图标
.setIcon(R.mipmap.ic_launcher)
// 设置提示内容
.setMessage("内容")
// 添加按钮1
.setPositiveButton("按钮1", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(MainActivity.this, "按钮1", Toast.LENGTH_SHORT).show();
    }
})
// 添加按钮2
.setNegativeButton("按钮2", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(MainActivity.this, "按钮2", Toast.LENGTH_SHORT).show();
    }
})
// 创建对话框
.create();
// 显示对话框
dialog.show();

普通列表对话框

普通列表对话框的内容区域显示为文本列表。文本列表通过AlertDialog.Builder对象调用setItems()方法设置的。

// 创建普通列表对话框数据
String[] items = {"内容1", "内容2", "内容3", "内容4", "内容5"};
AlertDialog alt = new AlertDialog.Builder(this)
    .setTitle("标题")
    .setItems(items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    })
    .setPositiveButton("按钮1", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    })
    .setNegativeButton("按钮2", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    })
    .create();
alt.show();

单选对话框

单选对话框的内容区域显示为单选列表。单选列表通过AlertDialog.Builder对象调用setSingleChoiceItem()方法设置的。

AlertDialog alt = new AlertDialog.Builder(this)
.setTitle("标题")
// 参数1:设置选项内容
// 参数2:设置默认选中项
// 参数3:建立监听,允许被点击
.setSingleChoiceItems(new String[]{"单选框1", "单选框2", "单选框3", "单选框4", "单选框5"}, 1, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
})
.setPositiveButton("按钮1", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
})
.setNegativeButton("按钮2", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
})
.create();
alt.show();

多选对话框

多选对话框的内容区域为多选列表。多选列表通过AlertDialog.Builder对象调用setMultiChiceItems()方法设置的。

// 创建多选框数据
String[] items = {"多选框1", "多选框2", "多选框3", "多选框4", "多选框5"};
//定义一个用来记录个列表项状态的boolean数组 一定要boolean不能是Boolean
boolean[] checkItems  = {false, false, false, false, false};
AlertDialog alt = new AlertDialog.Builder(this)
    .setTitle("标题")
    .setMultiChoiceItems(items, checkItems, new DialogInterface.OnMultiChoiceClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which, boolean isChecked) {
            
        }
    })
    .setPositiveButton("按钮1", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    })
    .setNegativeButton("按钮2", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
        }
    })
    .create();
alt.show();

自定义对话框

在Android程序中由于界面风格不同,一般不直接使用系统提供的对话框,而是根据项目需求定义相应对话框样式。

具体步骤如下:

  • 创建布局
    • 创建一个自定义对话框的布局,在布局中需要设定对话框的标题,对话框内容以及按钮。
  • 创建自定义对话框
    • 创建CommonDialog类继承自AlertDialog类,用于初始化自定义对话框中的控件以及响应的点击事件。
  • 使用自定义对话框
    • 在MainActivity中,调用CommonDialog相关构造方法将自定义对话框显示出来。

自定义布局文件

<?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="350dp"
        android:orientation="vertical">

    <LinearLayout
        ndroid:orientation="vertical"
        ndroid:layout_width="match_parent"
        ndroid:layout_height="65dp"
        ndroid:background="#ff4757">

        <TextView
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="标题"
           android:id="@+id/title"
           android:textSize="23sp"
           android:textColor="#fff"
           android:textStyle="bold"
           android:layout_marginLeft="16dp"
           android:layout_marginTop="16dp"/>
    </Lineaut>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/content"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:text="内容"
            android:textSize="16sp"/>
    </LinearLayout>
</LinearLayout>

创建自定义对话框

package com.example.myapplication;

import android.app.AlertDialog;
import android.content.Context;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class CommonDialog extends AlertDialog {

    private Context mContext;

    protected CommonDialog(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
        this.mContext = context;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.common_dialog);
        TextView title = (TextView) findViewById(R.id.title);
        title.setText("我是一个自定义对话框!");
        TextView content = (TextView) findViewById(R.id.content);
        title.setText("我是一个自定义对话框的内容。");
    }
}

使用自定义对话框

CommonDialog common = new CommonDialog(this);
   common.setTitle("自定义对话框");
   common.setIcon(R.mipmap.ic_launcher_round);
   common.create();
   common.show();
效果图

弹框出现禁止用户点击弹框以外的区域和禁止点击返回键

使用 setCancelable()

setCancelable() 设置对话框是否可取消。默认为true。我们只要把它改成false就可以禁止用户点击对话框以外的区域和返回键。

注意:设置了对话框不可取消一定要加上按钮否则会无法关闭,取消按钮的点击事件里不用写任何代码。

AlertDialog.Builder alt = new AlertDialog.Builder(this)
	.setTitle("标题")
	.setIcon(R.mipmap.ic_launcher)
	.setMessage("内容")
	.setPositiveButton("取消", new Dialog.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
		}
	})
	// 设置弹框不可关闭
	.setCancelable(false);
alt.create().show();

使用 setOnCancelListener()

setOnCancelListener() 设置在取消对话框时将调用的回调。用户点击对话框外的区域和返回键就会执行回调方法。

AlertDialog.Builder alt = new AlertDialog.Builder(this)
	.setTitle("标题")
	.setIcon(R.mipmap.ic_launcher)
	.setMessage("内容")
	.setPositiveButton("取消", new Dialog.OnClickListener() {
		@Override
		public void onClick(DialogInterface dialog, int which) {
		}
	})
	// 设置在取消对话框时将调用的回调。
	.setOnCancelListener(new Dialog.OnCancelListener() {
		@Override
		public void onCancel(DialogInterface dialog) {
			Toast.makeText(MainActivity.this, "关闭对话框", Toast.LENGTH_SHORT).show();
		}
	});
alt.create().show();

ins:hina__kmyd