Android AlertDialog对话框

发布于:2024-07-03 ⋅ 阅读:(16) ⋅ 点赞:(0)

AlertDialog对话框

部分节选自博主编《Android应用开发项目式教程》(机械工业出版社)2024.6

在Android中,AlertDialog弹出对话框用于显示一些重要信息或者需要用户交互的内容。
弹出对话框一般以小窗口的形式展示在界面上,如图所示。
弹出对话框一般可以分为三个部分:标题区、内容区、按钮区,其中内容区可以有多种样式,可以是普通的文本、单选框、多选框、输入框、自定义布局等。
在这里插入图片描述
一般情况下,创建AlertDialog对话框的步骤大致分为以下几步:
1)创建AlertDialog.Builder的对象;
2)设置AlertDialog对话框的标题名称和图标。
3)设置对话框内容,调用AlertDialog.Builder的setMessage()、setView()、setSingleChoiceItems()、setMultiChoiceItems()方法设置AlertDialog对话框的内容为简单文本、自定义、单选列表或多选列表。
4)调用AlertDialog.Builder的setPositiveButton()和setNegativeButton()方法设置AlertDialog对话框的确定和取消按钮。
5)调用AlertDialog.Builder的create()方法创建AlertDialog对象。
6)调用AlertDialog对象的show()方法显示该对话框。

普通对话框

在这里插入图片描述

创建普通对话框的示例代码如下:

                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("普通对话框");
                builder.setMessage("这是内容");
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "确定被点击了", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.show();

单选框

在这里插入图片描述

创建其他AlertDialog的代码类似,区别在于普通对话框内容部分是设置消息setMessage(),单选框是setSingleChoiceItems(),多选框是setMultiChoiceItems(),自定义框是setView()。单选框需要在选项被勾选时记录被勾选的选项,并在确定被单击时获取该选项值,单选框的关键示例代码如下:

 AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("单选对话框");
                builder.setSingleChoiceItems(singleItemStr, singleCheckedItem, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        singleCheckedItem = which;
                    }
                });
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, singleItemStr[singleCheckedItem] + "确定被点击了", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });

                AlertDialog alertDialog = builder.create();
                alertDialog.show();

多选框

在这里插入图片描述

多选框与单选框类似,也需要在选项被勾选时记录被勾选的选项,并在确定时获取被勾选的选项值,不同的是由于多选框可以多个选项被选中,因此需要用一个数组记录选项是否被勾选。多选框的关键示例代码如下:

AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("多选对话框");
                builder.setMultiChoiceItems(multiItemStr, multiCheckedItems, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        multiCheckedItems[which] = isChecked;
                    }
                });
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        StringBuffer stringBuffer = new StringBuffer();
                        for (int i = 0; i < multiCheckedItems.length; i++) {
                            if (multiCheckedItems[i]) {
                                stringBuffer.append(multiItemStr[i]).append(" ");
                            }
                        }
                        Toast.makeText(MainActivity.this, stringBuffer.toString() + "被选中了", Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });


                AlertDialog alertDialog = builder.create();
                alertDialog.show();

自定义框

自定义弹出对话框需要自定义对话框内容的布局,并实现相关逻辑。
以下是一个自定义对话框关键代码的示例,
在这里插入图片描述

该自定义对话框较为简单,只有一个输入框:

        LayoutInflater inflater = getLayoutInflater();
        View definedView = inflater.inflate(R.layout.self_defined, null, false);
        buttonDefine.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                builder.setIcon(R.mipmap.ic_launcher);
                builder.setTitle("自定义对话框");
                builder.setView(definedView);
                builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        EditText editText = definedView.findViewById(R.id.editTextText);
                        String str = editText.getText().toString().trim();
                        Toast.makeText(MainActivity.this, "输入密码是:" + str, Toast.LENGTH_SHORT).show();
                    }
                });
                builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                AlertDialog alertDialog = builder.create();
                alertDialog.show();
            }
        });

完整代码请查看gitee:source/v1.0/Project3Views/AlertDialogTest

Gitee