Android中AlertDialog的使用
- 简述
- 默认样式
- 单选弹出框
- 多选弹出框
- 列表对话框
- 自定义弹出框
- 完整代码
简述
        AlertDialog可以在当前的界面上显示一个对话框,这个对话框是置顶于所有界面元素之上的,能够屏蔽掉其他控件的交互能力,因此AlertDialog一般是用于提示一些非常重要的内容或者警告信息。
         对应手机上就是弹出框。通常和单击事件连用。
 正常的创建步骤
 AlertDialog不需要布局因此不需要再布局文件中定义。
 一、构造AlertDialog.Builder对象
AlertDialog.Builder defaultBuilder = new AlertDialog.Builder(MainActivity.this);
二、调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容
        //标题defaultBuilder.setTitle("默认样式");//提示信息defaultBuilder.setMessage("这是什么样式?");
三、调用setPositive/Negative/NeutralButton()方法设置选项
        //正面按钮 第一个参数提示信息 第二个参数实现监听接口defaultBuilder.setPositiveButton("默认样式",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"选对了",Toast.LENGTH_SHORT).show();}});
四、显示
defaultBuilder.show();
通常有四种默认样式、单选弹出框、 多选弹出框、列表对话框、自定义弹出框
 布局文件
 四个按钮对应对应四个弹出类型
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFFFF"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="标题"android:textSize="30sp"android:textColor="#000"android:layout_marginTop="20dp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="自定义的AlertDialog"android:textSize="20sp"android:textColor="#000"android:layout_marginTop="20dp"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginTop="20dp"android:background="#414E5E"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_weight="1"android:text="取消"android:backgroundTint="#F8F3F3"android:textColor="#0781B8"android:textSize="20sp"android:layout_height="wrap_content" /><Viewandroid:layout_width="1dp"android:background="#E4E5E6"android:layout_height="match_parent" /><Buttonandroid:id="@+id/btn_save"android:layout_width="0dp"android:layout_weight="1"android:backgroundTint="#F8F3F3"android:text="保存"android:textColor="#0781B8"android:textSize="20sp"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>默认样式
 //构造AlertDialog.Builder对象AlertDialog.Builder defaultBuilder = new AlertDialog.Builder(MainActivity.this);//调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容;//标题defaultBuilder.setTitle("默认样式");//提示信息defaultBuilder.setMessage("这是什么样式?");//调用setPositive/Negative/NeutralButton()方法设置选项 有正面按钮、负面按钮、中立按钮;//正面按钮 第一个参数提示信息 第二个参数实现监听接口defaultBuilder.setPositiveButton("默认样式",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"选对了",Toast.LENGTH_SHORT).show();}});//负面按钮defaultBuilder.setNegativeButton("多选样式", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"选错了",Toast.LENGTH_SHORT).show();}});//中立按钮defaultBuilder.setNeutralButton("我再想想", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"那你再想想",Toast.LENGTH_SHORT).show();}});//显示defaultBuilder.show();
效果
 
单选弹出框
    //单选public void singleAlertDialog(){final String[] sex = {"男","女"};AlertDialog.Builder singleBuilder = new AlertDialog.Builder(MainActivity.this);singleBuilder.setTitle("请选择性别");//setSingleChoiceItems 单选//只能选中一个  第二个参数是默认选中哪一个singleBuilder.setSingleChoiceItems(sex,0, new DialogInterface.OnClickListener() {//第二个参数代表选中那个下标的返回值@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,sex[which],Toast.LENGTH_SHORT).show();dialog.dismiss();//关闭对话框}});singleBuilder.show();}
效果
 
多选弹出框
//多选public void multipleAlertDialog(){final String[] book = {"从删库到跑路","深入理解计算机系学生秃头的原因","程序员的构造和解释","算法导论论不懂","计算机网络联不通"};boolean[] begin = {false,false,false,false,false};//初始状态为全部不选中ArrayList<String> bookList = new ArrayList<String>();AlertDialog.Builder multipleAlertDialog = new AlertDialog.Builder(MainActivity.this);multipleAlertDialog.setTitle("想要读什么?");//setMultiChoiceItems 多选multipleAlertDialog.setMultiChoiceItems(book, begin, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if(isChecked){bookList.add(book[which]);Toast.makeText(MainActivity.this,"任意选中就true",Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this,"任意取消就false",Toast.LENGTH_SHORT).show();bookList.remove(book[which]);}//Toast.makeText(MainActivity.this,book[which],Toast.LENGTH_SHORT).show();}});multipleAlertDialog.setPositiveButton("选好了", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,bookList.toString(),Toast.LENGTH_SHORT).show();}});multipleAlertDialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"不准备读一读吗?",Toast.LENGTH_SHORT).show();}});multipleAlertDialog.show();}

列表对话框
    //列表public void tableAlertDialog(){AlertDialog.Builder tableBuilder = new AlertDialog.Builder(MainActivity.this);final String[] course = {"C++","Java","Go","php","Pyhton"};tableBuilder.setTitle("你喜欢那个语言?");tableBuilder.setItems(course, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,course[which],Toast.LENGTH_SHORT).show();}});tableBuilder.show();}
效果
 
自定义弹出框
本质上就是弹出一个你自己定义的页面
 布局alertdialog_custom
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="#FFFFFFFF"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="标题"android:textSize="30sp"android:textColor="#000"android:layout_marginTop="20dp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="自定义的AlertDialog"android:textSize="20sp"android:textColor="#000"android:layout_marginTop="20dp"/><Viewandroid:layout_width="match_parent"android:layout_height="1dp"android:layout_marginTop="20dp"android:background="#414E5E"/><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"><Buttonandroid:id="@+id/btn_cancel"android:layout_width="0dp"android:layout_weight="1"android:text="取消"android:backgroundTint="#F8F3F3"android:textColor="#0781B8"android:textSize="20sp"android:layout_height="wrap_content" /><Viewandroid:layout_width="1dp"android:background="#E4E5E6"android:layout_height="match_parent" /><Buttonandroid:id="@+id/btn_save"android:layout_width="0dp"android:layout_weight="1"android:backgroundTint="#F8F3F3"android:text="保存"android:textColor="#0781B8"android:textSize="20sp"android:layout_height="wrap_content" /></LinearLayout></LinearLayout>代码
  //自定义对话框public void customizeAlertDialog(){AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//先创建AlertDialog对象AlertDialog dialog = builder.create();//初始化viewView dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.alertdialog_custom,null);//设置弹出页面 为自定义布局dialog.setView(dialogView);dialog.show();//剩下的当成正常页面操作Button btnCancel,btnSave;btnCancel = dialogView.findViewById(R.id.btn_cancel);btnSave = dialogView.findViewById(R.id.btn_save);btnCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"你选择了取消",Toast.LENGTH_SHORT).show();dialog.dismiss();//关闭对话框}});btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"你选择了保存",Toast.LENGTH_SHORT).show();dialog.dismiss();}});}
效果
 
 注意:宽度是固定的 想要修改宽度需要代码设置
dialog.getWindow().setLayout(width,height);
完整代码
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;import android.content.DialogInterface;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {Button mBtnDefault,mBtnSingle,mBtnMultiple,mBtnTable,mBtnCustomize;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//初始化控件mBtnDefault   = findViewById(R.id.btnDefault);mBtnSingle    = findViewById(R.id.btnSingle);mBtnMultiple  = findViewById(R.id.btnMultiple);mBtnTable     = findViewById(R.id.btnTable);mBtnCustomize = findViewById(R.id.btnCustomize);//对应单击事件 按钮比较多可以使用内部类实现监听接口来复用、规范代码//默认mBtnDefault.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {defaultAlertDialog();}});//单选mBtnSingle.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {singleAlertDialog();}});//多选mBtnMultiple.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {multipleAlertDialog();}});//列表mBtnTable.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {tableAlertDialog();}});//自定义对话框mBtnCustomize.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {customizeAlertDialog();}});}//默认public void defaultAlertDialog(){//构造AlertDialog.Builder对象AlertDialog.Builder defaultBuilder = new AlertDialog.Builder(MainActivity.this);//调用setTitle、setMessage、setIcon等方法构造对话框的标题、信息和图标等内容;//标题defaultBuilder.setTitle("默认样式");//提示信息defaultBuilder.setMessage("这是什么样式?");//调用setPositive/Negative/NeutralButton()方法设置选项 有正面按钮、负面按钮、中立按钮;//正面按钮 第一个参数提示信息 第二个参数实现监听接口defaultBuilder.setPositiveButton("默认样式",new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"选对了",Toast.LENGTH_SHORT).show();}});//负面按钮defaultBuilder.setNegativeButton("多选样式", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"选错了",Toast.LENGTH_SHORT).show();}});//中立按钮defaultBuilder.setNeutralButton("我再想想", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"那你再想想",Toast.LENGTH_SHORT).show();}});//显示defaultBuilder.show();}//单选public void singleAlertDialog(){final String[] sex = {"男","女"};AlertDialog.Builder singleBuilder = new AlertDialog.Builder(MainActivity.this);singleBuilder.setTitle("请选择性别");//setSingleChoiceItems 单选//只能选中一个  第二个参数是默认选中哪一个singleBuilder.setSingleChoiceItems(sex,0, new DialogInterface.OnClickListener() {//第二个参数代表选中那个下标的返回值@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,sex[which],Toast.LENGTH_SHORT).show();dialog.dismiss();//关闭对话框}});singleBuilder.show();}//多选public void multipleAlertDialog(){final String[] book = {"从删库到跑路","深入理解计算机系学生秃头的原因","程序员的构造和解释","算法导论论不懂","计算机网络联不通"};boolean[] begin = {false,false,false,false,false};//初始状态为全部不选中ArrayList<String> bookList = new ArrayList<String>();AlertDialog.Builder multipleAlertDialog = new AlertDialog.Builder(MainActivity.this);multipleAlertDialog.setTitle("想要读什么?");//setMultiChoiceItems 多选multipleAlertDialog.setMultiChoiceItems(book, begin, new DialogInterface.OnMultiChoiceClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which, boolean isChecked) {if(isChecked){bookList.add(book[which]);Toast.makeText(MainActivity.this,"任意选中就true",Toast.LENGTH_SHORT).show();}else {Toast.makeText(MainActivity.this,"任意取消就false",Toast.LENGTH_SHORT).show();bookList.remove(book[which]);}//Toast.makeText(MainActivity.this,book[which],Toast.LENGTH_SHORT).show();}});multipleAlertDialog.setPositiveButton("选好了", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,bookList.toString(),Toast.LENGTH_SHORT).show();}});multipleAlertDialog.setNeutralButton("取消", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,"不准备读一读吗?",Toast.LENGTH_SHORT).show();}});multipleAlertDialog.show();}//列表public void tableAlertDialog(){AlertDialog.Builder tableBuilder = new AlertDialog.Builder(MainActivity.this);final String[] course = {"C++","Java","Go","php","Pyhton"};tableBuilder.setTitle("你喜欢那个语言?");tableBuilder.setItems(course, new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {Toast.makeText(MainActivity.this,course[which],Toast.LENGTH_SHORT).show();}});tableBuilder.show();}//自定义对话框public void customizeAlertDialog(){AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);//先创建AlertDialog对象AlertDialog dialog = builder.create();//初始化viewView dialogView = LayoutInflater.from(MainActivity.this).inflate(R.layout.alertdialog_custom,null);//设置弹出页面 为自定义布局dialog.setView(dialogView);dialog.show();//剩下的当成正常页面操作Button btnCancel,btnSave;btnCancel = dialogView.findViewById(R.id.btn_cancel);btnSave = dialogView.findViewById(R.id.btn_save);btnCancel.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"你选择了取消",Toast.LENGTH_SHORT).show();dialog.dismiss();//关闭对话框}});btnSave.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Toast.makeText(MainActivity.this,"你选择了保存",Toast.LENGTH_SHORT).show();dialog.dismiss();}});}}
















