Baike.dev
All toolsOnline toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
D

Dialog

> 编程语言
Open source

空祖家的对话框工具

730 stars0 likes1 views
WebsiteGitHub

About

空祖家的对话框工具

空祖家的对话框 V2

献给要求我们安卓照着苹果设计稿做开发的产品们(手动滑稽

新版本 DialogX

本库即将停止新功能的更新,请尽快升级使用 DialogX 。

Kongzue DialogX 现已上传正式版本,请前往 查看。

V2版本

空祖家的对话框2.0拥有提供最简单的调用方式以实现消息框、选择框、输入框、等待提示、警告提示、完成提示、错误提示等弹出样式。以下是目前包含的所有对话框样式预览图:

试用版可以前往 下载

本例中,包含DialogDemo(Dialog/app/)是对话框的演示项目源代码,以及Library库(Dialog/dialog/)是封装的空祖家对话框的源代码。

项目托管的Maven仓库在

本项目遵循Apache-2.0开源协议,具体可参考:

目录

· Maven仓库或Gradle的引用方式

· 使用说明

· 关于v2组件包

· 关于模糊效果

· 使用方法

···· 调用消息对话框的方法

···· 调用选择对话框的方法

···· 调用输入对话框

···· 调用等待提示框

···· 调用完成提示框

···· 调用警告提示框

···· 调用错误提示框

···· 调用消息通知

···· 调用底部菜单

···· 气泡提示

· 自定义对话框

· 自定义布局

· 附加功能

· 模态化(序列化)

· 一些建议

· 开源协议

· 更新日志

Maven仓库或Gradle的引用方式

Maven仓库:


  com.kongzue.dialog
  dialog
  2.5.2
  pom

Gradle: 在dependencies{}中添加引用:

implementation 'com.kongzue.dialog:dialog:2.5.2'

部分 Material 组件需要依赖:

implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support:design:28.0.0'

⚠现有 Android X 版本提供,具体请转至 Android X分支 查看。

此外,

若需要使用 v1 兼容库的老版本,可使用:

implementation 'com.kongzue.dialog:dialog:2.2.8'        //警告:不再提供更新

若需要降低包体积,可使用不带模糊的版本:

implementation 'com.kongzue.dialog:dialog:2.1.0'        //警告:不再提供更新

使用说明

  1. 组件启用前请先初始化全局的风格样式,具体方法为
DialogSettings.style = STYLE_MATERIAL;

Material 风格对应 DialogSettings.STYLE_MATERIAL,

Kongzue 风格对应 DialogSettings.STYLE_KONGZUE,

iOS 风格对应 DialogSettings.STYLE_IOS

需要注意的是风格设置仅针对对话框,提示框样式不会改变。

  1. 要启用 Light & Dark 黑白主题模式,请调用以下语句实现:
DialogSettings.tip_theme = THEME_LIGHT;         //设置提示框主题为亮色主题
DialogSettings.dialog_theme = THEME_DARK;       //设置对话框主题为暗色主题

具体预览图如下:

  1. 从 2.0.4 版本开始,提供不需要悬浮窗权限,且可以跨域显示的通知功能,如下图所示:

  2. 从 2.1.0 版本开始,提供底部菜单,可以通过 com.kongzue.dialog.v2.BottomMenu 进行使用,如下图所示:

  3. 从 2.1.1 版本开始,iOS风格的对话框、提示框、底部菜单新增即时模糊效果:

  4. 从 2.2.3 版本开始,MessageDialog、SelectDialog、InputDialog和BottomMenu 支持自定义布局:

  5. 从 2.3.4 版本开始,提供气泡提示功能:

关于v2组件包

在空祖家的对话框组件中,依然保留了一代的组件库但不再推荐使用,这是为了保持兼容性,若强行使用您会看到相关类的名称上有删除线。

为了更有效率的开发,我们现在强烈推荐直接使用v2组件库,其包含的包地址为:com.kongzue.dialog.v2

关于模糊效果

从2.1.1版本起可使用即时模糊效果。

您可以通过以下属性设置开关:

DialogSettings.use_blur = true;                 //设置是否启用模糊

如果需要启动,还需要在您的 app 的 build.gradle 中添加以下代码:

android {
    ...
    defaultConfig {
        ...

        renderscriptTargetApi 19
        renderscriptSupportModeEnabled true
    }
}

模糊效果目前仅对当 DialogSettings.style = STYLE_IOS 时三种对话框、提示框、等待框以及底部菜单有效。

可以通过以下方法修改模糊透明度:

/*
 *  决定等待框、提示框以及iOS风格的对话框的模糊背景透明度(50-255)
 */
DialogSettings.blur_alpha = 200;

使用方法

提示:所有对话框组件均提供相应的 build(...) 方法用于预先创建,如需要对对话框部分参数进行微调的,可使用 build(...) 方法先创建对话框,然后调用相应的方法进行属性设置,再使用 showDialog() 方法显示对话框。

调用消息对话框的方法:

MessageDialog.show(context, "消息提示框", "用于提示一些消息", "知道了", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    }
});

或者可以采用快速调用方式:

MessageDialog.show(context, "欢迎", "欢迎使用Kongzue家的对话框,此案例提供常用的几种对话框样式。\n如有问题可以在https://github.com/kongzue/Dialog提交反馈");

调用选择对话框的方法:

SelectDialog.show(context, "提示", "请做出你的选择", "确定", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(context, "您点击了确定按钮", Toast.LENGTH_SHORT).show();
    }
}, "取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(context, "您点击了取消按钮", Toast.LENGTH_SHORT).show();
    }
});

或者可以采用快速调用方式:

SelectDialog.show(context, "提示", "请做出你的选择", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(context, "您点击了确定按钮", Toast.LENGTH_SHORT).show();
    }
});

调用输入对话框:

InputDialog.show(context, "设置昵称", "设置一个好听的名字吧", "确定", new InputDialogOkButtonClickListener() {
    @Override
    public void onClick(Dialog dialog, String inputText) {
        Toast.makeText(context, "您输入了:" + inputText, Toast.LENGTH_SHORT).show();
    }
}, "取消", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
});

或者可以采用快速调用方式:

InputDialog.show(context, "设置昵称", "设置一个好听的名字吧", new InputDialogOkButtonClickListener() {
                    @Override
                    public void onClick(Dialog dialog, String inputText) {
                        Toast.makeText(context, "您输入了:" + inputText, Toast.LENGTH_SHORT).show();
                    }
                });

从 2.3.6 版本起,对于输入文本长度限制和文本类型限制,可通过 setInputInfo(InputInfo) 方法进行设置:

…

调用等待提示框:

WaitDialog.show(context, "载入中...");

从 2.3.8 版本起,等待提示框支持自定义布局,可通过以下代码调用:

View customView = LayoutInflater.from(me).inflate(R.layout.layout_custom, null);
WaitDialog.show(context, "载入中...", customView);

要动态修改正在显示的文本,可以先使用 show(...) 方法获取 WaitDialog 对象,然后使用 setText(...) 修改正在显示的文本。

但请注意,设置自定义布局并不会隐藏提示文本信息。

调用完成提示框:

TipDialog.show(context, "完成", TipDialog.SHOW_TIME_SHORT, TipDialog.TYPE_FINISH);

调用警告提示框:

TipDialog.show(context, "请输入密码", TipDialog.SHOW_TIME_SHORT, TipDialog.TYPE_WARNING);

调用错误提示框:

TipDialog.show(context, "禁止访问", TipDialog.SHOW_TIME_LONG, TipDialog.TYPE_ERROR);

调用消息通知:

注意,此处使用的是来自com.kongzue.dialog.v2 的 Notification 类。

通知消息(v2.Notification)与提示框(v2.TipDialog)的主要区别是提示框会打断用的操作,而消息通知不会,消息通知适合于并发需要提醒用户是否处理消息的业务场景,而提示框适用于阻断用户操作,提醒用户当前发生的情况的业务场景。

Notification.show(context, id, iconResId, getString(R.string.app_name), "这是一条消息", Notification.SHOW_TIME_LONG, notifactionType)
                        .setOnNotificationClickListener(new Notification.OnNotificationClickListener() {
                            @Override
                            public void OnClick(int id) {
                                Toast.makeText(context,"点击了通知",SHOW_TIME_SHORT).show();
                            }
                        })
                ;

其中,id为通知消息id,在用户点击该通知后,会在OnNotificationClickListener中进行回调。

字段 含义 是否必须
context 上下文索引 必须
iconResId 图标 可选
title 通知标题 可选
message 通知内容 必须
colorType 消息类型 必须
OnNotificationClickListener 下载监听器 可选

注意,此处的消息类型 colorType 目前仅对“Kongzue 风格”有效,且提供的风格有:

字段 含义 是否默认
TYPE_NORMAL 默认灰黑色 默认
TYPE_FINISH 绿色 可选
TYPE_WARNING 橙色 可选
TYPE_ERROR 红色 可选

在2.0.6版本后,若 colorType 不为上述设定值,则可以使用自选颜色值,可为 Color 类的返回值。

另外,可以采用快速调用方式:

Notification.show(context, 0, "", "这是一条消息", Notification.SHOW_TIME_SHORT, notifactionType);

调用底部菜单:

注意,此处使用的是来自com.kongzue.dialog.v2 的 BottomMenu 类。

List list = new ArrayList<>();
list.add("菜单1");
list.add("菜单2");
list.add("菜单3");
BottomMenu.show(context, list, new OnMenuItemClickListener() {
    @Override
    public void onClick(String text, int index) {
        Toast.makeText(context,"菜单 " + text + " 被点击了",SHOW_TIME_SHORT).show();
    }
},true);

包含的参数如下:

字段 含义 是否必须
activity 必须继承自 AppCompatActivity 必须
list 泛型为 String 的列表 必须
OnMenuItemClickListener 点击回调 可选
isShowCancelButton 是否显示“取消”按钮,注意,STYLE_MATERIAL 风格对此无效 可选
cancelButtonCaption 设置“取消”按钮的文字 可选

另外,本菜单暂时对夜间模式(THEME_DARK)不受影响,只提供Light Theme,但不排除接下来的版本对此更新。

使用 iOS 主题时,DialogSettings.ios_normal_button_color 会对菜单内容文字的颜色产生影响,其他主题不受此属性影响。

或可以使用快速调用:

List list = new ArrayList<>();
list.add("菜单1");
list.add("菜单2");
list.add("菜单3");
BottomMenu.show(context, list);

为底部对话框添加标题:

BottomMenu.show(context, list).setTitle("这里是标题测试");

气泡提示:

从 2.3.4 版本起,新增气泡提示功能。

使用方法如下:

Pop.show(context, view, "这是一个提示", showWhere, colorType);

view 为气泡提示需要跟随的布局,可选参数 showWhere 可选:

字段 含义 是否默认
SHOW_UP 在跟随布局上方显示 是
SHOW_LEFT 在跟随布局左侧显示 否
SHOW_RIGHT 在跟随布局右侧显示 否
SHOW_DOWN 在跟随布局下方显示 否

可选参数 colorType 控制气泡颜色,当其值为 COLOR_TYPE_NORMAL 时受 DialogSettings.tip_theme 设置影响,会显示暗色或亮色主题,另外可选:

字段 含义 是否默认
COLOR_TYPE_NORMAL 默认颜色,此时会受 DialogSettings.tip_theme 影响 是
COLOR_TYPE_FINISH 绿色 否
COLOR_TYPE_WARNING 橙色 否
COLOR_TYPE_ERROR 红色 否

其次可使用 setText(...) 方法对已经创建的气泡提示进行文字修改,范例如下:

pop.setText("至少填写6位,还差" + (6 - editPop.getText().toString().length()) + "位");

可使用 setOnDismissListener(...) 方法对气泡消失事件进行监听:

pop.setOnDismissListener(new PopupWindow.OnDismissListener() {
    @Override
    public void onDismiss() {

    }
});

可使用 dismiss(); 方法直接关闭已创建的气泡:

pop.dismiss();

从 2.3.5 版本起,针对复杂特殊文本显示进行了适配:

自定义对话框:

从 2.3.9 版本起,支持自定义对话框的创建:

CustomDialog.show(context, R.layout.layout_custom_dialog, new CustomDialog.BindView() {
    @Override
    public void onBind(CustomDialog dialog, View rootView) {
        //绑定布局
        ImageView btnOk = rootView.findViewById(R.id.btn_ok);
        //绑定事件
        btnOk.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Example:让对话框消失
                dialog.doDismiss();
            }
        });
    }
});

CustomDialog 的创建方式支持通过 layout 资源 ID 或直接使用 View 创建,其也支持对话框的模态化以及生命周期管理。

需要在自定义的对话框中关闭 CustomDialog,您可以在全局接收 CustomDialog 的 show 或 build 返回的组件,并执行其 doDismiss() 方法:

private CustomDialog customDialog;

//...

customDialog = CustomDialog.show(me, R.layout.layout_custom_dialog, new CustomDialog.BindView() {
            @Override
            public void onBind(View rootView) {
                ImageView btnOk = rootView.findViewById(R.id.btn_ok);

                //...

                btnOk.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        customDialog.doDismiss();
                    }
                });
            }
        });

自定义布局:

从 2.2.3 版本起支持 MessageDialog、SelectDialog、InputDialog和BottomMenu 的自定义布局。

由于调用逻辑顺序不同,在 type 为 STYLE_KONGZUE 和 STYLE_IOS 使用方法举例:

//初始化布局:
View customView = LayoutInflater.from(context).inflate(R.layout.layout_custom, null);
//启动对话框
MessageDialog.show(context, null, null, "知道了", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                }).setCustomView(customView);

在 type 为 STYLE_MATERIAL 时,请先使用 build(...) 方法创建 Dialog,接着设置好自定义布局后再执行 showDialog() 方法,使用方法举例:

//初始化布局:
View customView = LayoutInflater.from(me).inflate(R.layout.layout_custom, null);
//启动对话框
MessageDialog.build(context, null, null, "知道了", new DialogInterface.OnClickLis
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
}).setCustomView(customView)
  .setCanCancel(true)
  .showDialog();

等待对话框的自定义布局请参考:调用等待提示框

附加功能:

在任何一种对话框中都可以使用.setCanCancel(boolean)来设置是否可以点击对话框以外的区域关闭对话框,提示类默认都是禁止的,选择、输入对话框默认也是禁止的,消息对话框默认是允许的。

使用方法可以参考以下代码:

WaitDialog.show(context, "载入中...").setCanCancel(true);

在空祖家的对话框组件中,您可以使用监听器来监听对话框的生命周期,Demo如下:

WaitDialog.show(context, "载入中...").setCanCancel(true).setDialogLifeCycleListener(new DialogLifeCycleListener() {
    @Override
    public void onCreate(AlertDialog alertDialog) {
        //此时对话框创建
    }
    @Override
    public void onShow(AlertDialog alertDialog) {
        //此时对话框显示
    }
    @Override
    public void onDismiss() {
        //此时对话框关闭
    }
});

另外提供一些定制属性:

…

若需要对某个对话框、提示框等进行单独的文字样式设置,请通过相应对话框的 build 创建该对话框,在调用 showDialog() 方法前进行 setTextInfo():

MessageDialog.build(me, "标题", "内容", "知道了", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {

    }
}).setCanCancel(true)
  .setTitleTextInfo(new TextInfo()
      .setBold(true)
      .setFontColor(Color.rgb(253, 130, 255))
      .setFontSize(10)
  )
  .showDialog();

额外的,若您需要自定义对话框的标题、内容、按钮,请使用相对应的方法进行设置:

.setTitleTextInfo(new TextInfo())           //设置标题文字样式
.setContentTextInfo(new TextInfo())         //设置内容文字样式
.setButtonTextInfo(new TextInfo())          //设置按钮文字样式
.setOkButtonTextInfo(new TextInfo())        //针对选择对话框、输入对话框的“确定”按钮进行文字样式单独设置,不设置则按照 ButtonTextInfo 的样式处理
.setTxtInfo(new TextInf

Issues· 0 open

View all issuesOpen on GitHub

No open issues yet, or sync has not completed.

> Tags

Javaandroiddialoginputdialogkongzue

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言