android之自定义Dialog

本文介绍了在Android中自定义Dialog的实现方法,包括使用可输入的Dialog、普通弹出框、列表选择框和自定义布局。重点讲述了自定义布局的步骤,包括定义style、XML布局文件以及自定义Dialog类。同时,文中提到了Dialog使用的注意事项,如正确获取Context的方式,以及如何处理Dialog的点击事件和关闭行为。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

今天完成了之前界面课程详情页的撰写。开始写新的界面及其逻辑,其中用到了Dialog,于是开始学习Dialog,公司做法是自定义一个新类继承自Dialog,使用新布局作为这个Dialog的样子。然后每次新建这个新类,并同时设置Dialog中两个按钮的监听器。如果大家有这个基础,直接去看自定义布局,为了防止csdn下载需要积分,我直接把代码全贴出来。
界面类似于:
在这里插入图片描述
接下来要学习一下关于Dialog的用法。首先还是放几篇好文章:
1.Android Dialog的官方教程
2.android 8种对话框(Dialog)使用方法汇总
官方的教程就是给力。
Dialog是对话框的基类,但您应该避免直接实例化 Dialog,而是使用下列子类之一:
AlertDialog
此对话框可显示标题、最多三个按钮、可选择项列表或自定义布局。
DatePickerDialogTimePickerDialog
此对话框带有允许用户选择日期或时间的预定义 UI。
Android 包括另一种名为 ProgressDialog 的对话框类,可显示具有进度条的对话框。不过,如需指示加载进度或不确定的进度,则应改为遵循进度和 Activity 的设计指南,并在您的布局中使用 ProgressBar

注意事项

1.这是错误的获取context方式。

final AlertDialog.Builder builder = new AlertDialog.Builder(getApplicationContext());

应该直接传入当前所在的Activity

final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

使用可输入的Dialog

在这里插入图片描述

 public void showEditDialog()
    {
   
   
        final EditText inputServer = new EditText(this);
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Edit Dialog").setIcon(android.R.drawable.ic_dialog_info).setView(inputServer)
                .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
   
   
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
   
   
                        Toast.makeText(MainActivity.this,"你取消是干啥玩意?",
                                Toast.LENGTH_SHORT).show();
                    }
                });
        builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
   
   

            public void onClick(DialogInterface dialog, int which) {
   
   
                Toast.makeText(MainActivity.this,inputServer.getText().toString(),
                        Toast.LENGTH_SHORT).show();
            }
        });
        builder.show();
    }

普通弹出框

在这里插入图片描述

public void showNormalDialog()
    {
   
   
        /* @setIcon 设置对话框图标
         * @setTitle 设置对话框标题
         * @setMessage 设置对话框消息提示
         * setXXX方法返回Dialog对象,因此可以链式设置属性
         */
        final 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 dialogInterface, int i) {
   
   
                Toast.makeText(MainActivity.this,"点击了确定",Toast.LENGTH_SHORT).show();
            }
        });
        builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
   
   
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
   
   
                Toast.makeText(MainActivity.this,"点击了取消",Toast.LENGTH_SHORT).show();

            }
        });
        builder.setNeutralButton("中间的",
                new DialogInterface.OnClickListener() {
   
   
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
   
   
                        Toast.makeText(MainActivity.this,"点击了中间的",Toast.LENGTH_SHORT).show();

                    }
                });
        builder.create().show();


    }

列表选择框、单选框、多选框

列表选择框就使用如下方法

builder.setItems(@ArrayRes int itemsId, OnClickListener listener)

要想添加多选项(复选框)或单选项(单选按钮)列表,请分别使用 setMultiChoiceItems() 或 setSingleChoiceItems() 方法。
在这里插入图片描述
以下示例展示了如何创建如图 所示的多选列表,将选定项保存在一个 ArrayList 中:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值