首页 > 其他分享 >Android AlertDialog对话框

Android AlertDialog对话框

时间:2024-07-04 20:29:07浏览次数:20  
标签:对话框 builder DialogInterface AlertDialog dialog new Android

目录

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

标签:对话框,builder,DialogInterface,AlertDialog,dialog,new,Android
From: https://blog.csdn.net/Lwjobs/article/details/140110579

相关文章

  • Android常见错误
    错误1Aproblemoccurredconfiguringrootproject'����ʶ��'.>Couldnotresolveallfilesforconfiguration':classpath'.>Couldnotresolvecom.android.tools.build:gradle:8.4.0.Requiredby:project:>com.a......
  • Android Systrace 基础知识 -- 分析 Systrace 预备知识
    1.正文1.1线程状态查看Systrace会用不同的颜色来标识不同的线程状态,在每个方法上面都会有对应的线程状态来标识目前线程所处的状态,通过查看线程状态我们可以知道目前的瓶颈是什么,是cpu执行慢还是因为Binder调用,又或是进行io操作,又或是拿不到cpu时间片绿色:......
  • 关于Android Q平台上qssi的介绍
    QSSI是QualcommSingleSystemImage的缩写。AndroidQ上开始支持QSSI。QSSI是用来编译system.img的3.1QSSI编译注意事项lunchqssi------编译system.imglunchtarget------编译其余的image3.2有QSSI和没有QSSI的编译流程对比没有QSSIsourcebuild/envse......
  • android 性能优化 -systrace
    简介:Systrace允许监视和跟踪Android系统的行为(trace)。它会指明系统都在哪些工作上花费时间、CPU周期都用在哪里,甚至可以看到每个线程、进程在指定时间内都在干嘛。它同时还会突出观测到的问题,从垃圾回收到渲染内容都可能是问题对象,甚至提供建议的解决方案。但是不能确定具体有......
  • 使用Charles实现Android抓包,附带Charles破解教程
    1.下载Charles网址:下载Charles安装完成后的界面:2.配置http抓包点击该选项可以看到代理的ip和端口号然后在手机的wifi中配置代理(手机和电脑要在同一局域网),代理选择手动,并填入ip和端口号电脑出现允许代理的提示,点击Allow即可到此处表示已经可以抓http的手机包......
  • rk3128 android4.4找不到内部存储空间
    修改如下:device/rockchip/rk312xdiff--gita/fstab.rk30board.bootmode.emmcb/fstab.rk30board.bootmode.emmcindex4b04d83..276b77b100755---a/fstab.rk30board.bootmode.emmc+++b/fstab.rk30board.bootmode.emmc@@-8,10+8,10@@/dev/block/platform/1021c000.......
  • Android经典面试题之Glide的缓存大揭秘
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点Glide缓存关联类:Engine、LruResourceCache、LruCache、ActiveResourcesActiveResources:弱引用缓存池@VisibleForTestingfinalMap<Key,ResourceWeakReferenc......
  • android 代码如何增加atrace跟踪
    在Android代码中增加Atrace跟踪,可以使用Android提供的android.os.Trace类。这允许你在应用代码中手动添加自定义的跟踪点,以捕获特定代码段的执行情况。以下是如何在Android代码中增加Atrace跟踪的步骤:导入android.os.Trace:首先,在你的Java或Kotlin文件中导入......
  • 【笔记】Android Settings 应用设置菜单的界面代码介绍
    简介Settings应用中,提供多类设置菜单入口,每个菜单内又有各模块功能的实现。那么各个模块基于Settings基础的界面Fragment去实现UI,层层按不同业务进行封装继承实现子类:DashboardFragmentSettingsPreferenceFragment功能设置页中的菜单又是通过Controller去实现业务并进行UI......
  • Android系统签名简介
    apk的签名,简单说开发者可以通过签名对应用进行标识和更新。包名在一个设备上是唯一的,这样可以避免被相同包名应用随意覆盖安装。这是一个非常重要的安全功能。系统中的签名文件,也是对系统中应用进行签名,编译应用是可以指定签名类型。 下面介绍的是Android系统中的签名相关内容......