💬DialogX对话框组件库,更加方便易用,可自定义程度更高,扩展性更强,轻松实现各种对话框、菜单和提示效果,更有iOS、MIUI等主题扩展可选

Overview

Kongzue DialogX

经过三代的更迭,全新的 Kongzue DialogX 已经到来,不仅仅保留了以往的优势,更带来了更灵活的扩展性和全新的流畅体验。

Kongzue Dialog Maven Jitpack.io License Homepage

DialogX

DialogX优势

对话框是一个软件对用户操作进行响应、反馈的重要组件,而 DialogX 将可以协助开发者快速完成这些事务。

我们力求减少开发者所需要担心的,所需要顾虑的,而打造一款可以在任意时间,任意情况都能轻松使用的对话框组件。

在轻松使用的前提下,DialogX 提供了更多的个性接口方便开发者进行扩展,包括在对话框内插入自定义布局,亮暗色模式的切换,甚至自定义更符合 App UI 的自定义主题。

DialogX的特性:

  • DialogX 采用全新的实现方式,默认 View 实现方式更为轻便,亦可选 Window、DialogFragment 实现方式,自由灵活。
  • DialogX 的启动与线程无关,你可以在任意线程启动 DialogX 而它都将自动在 UI 线程运行。
  • DialogX 的启动无需 context 参数,默认提供静态方法一句代码实现对话框的启动,使用更加方便。
  • 更自由,开发者可以轻松定制对话框中任何组件的样式,包括文本样式、按钮文字样式、菜单文本样式、输入文本样式,大到标题,小到提示消息都可以根据需要随意修改。
  • DialogX 采用主题分离设计,默认自带 Material 主题,可选引入 IOS、Kongzue、MIUI 等其他风格主题,大大减小 App 体积,同时提供了主题接口,如有定制需求完全可以自行实现一套私有主题。
  • 更低的耦合度,更少的问题,DialogX 可以在对话框正在运行的过程中随意关闭 Activity ,而无需担心以往 AlertDialog 等组件会引发的 WindowLeaked 错误。
  • 更流畅的体验,DialogX 的动画效果更加丰富,对话框启动动画采用非线性动画实现,更自带连贯的等待提示到完成错误动画过渡效果,让你的 APP 更具动感。
  • 所有主题默认支持亮暗色两种模式,只需一键配置即可实现亮暗色的对话框主题切换,更有自由的布局内容满足定制化需求,DialogX 也支持自动适应系统亮暗色模式切换,能够根据系统设置自动判断亮暗色显示效果的切换。
  • 轻松的实现对话框的生命周期管控以及沉浸式适配。

DialogX对话框

DialogX 包含以下对话框组件:

  • 基础对话框 MessageDialog和 输入对话框 InputDialog

    基础对话框 MessageDialog和 输入对话框 InputDialog

    基础对话框组件可以实现基本的对话框业务逻辑,包含标题、消息文本、单/双/三按钮的提醒功能,三个按钮可以按照纵向/横向进行显示,满足绝大部分日常阻断式提醒需求。

    输入对话框 InputDialog 是基础对话框的扩展组件,除了包含基础的功能外还提供了输入框,可自定义输入提示文本、输入文字样式和点击按钮后的输入内容回调等。

  • 等待框 WaitDialog 和提示框 TipDialog

    等待框 WaitDialog 和提示框 TipDialog

    阻断式等待提示框,会显示基础的环形等待动画以及进度展示动画,它是单例的,这就意味着从等待状态 WaitDialog 切换到提示状态 TipDialog 是无缝的,你可以自由的选择在等待结束后显示成功/警告/错误三种状态的消息提示,动画的切换也会无缝衔接。

  • 底部对话框 BottomDialog 和底部菜单 BottomMenu

    底部对话框 BottomDialog 和底部菜单 BottomMenu

    底部对话框 BottomDialog 提供从底部弹出显示的对话框样式,可设置标题、提示文本和自定义布局,使用 Material 主题时还会提供向下滑动关闭和向上滑动展开的功能。

    底部菜单 BottomMenu 则是底部对话框 BottomDialog 的扩展组件,在底部对话框的基础上额外提供了菜单功能,菜单可设置菜单内容/菜单图标/单选功能,在不同的主题下还可以提供“取消”关闭按钮

  • 简单提示 PopTip

    简单提示 PopTip

    提供一个类似 Toast 的文本提示功能,但它拥有更强大的自定义属性。你可以设置文本提示、图标、以及一个控制按钮,并可以设置持续显示或定义自动消失的时长。PopTip 是非阻断式提示,也就是说,在 PopTip 显示时用户依然可以操作界面。

  • 全屏对话框 FullScreenDialog

    全屏对话框 FullScreenDialog

    全屏对话框 FullScreenDialog 提供从底部弹出的对话框效果,类似 BottomDialog 但相比 BottomDialog 的定制化自由度更高。全屏对话框 FullScreenDialog 将不提供任何基础实现,开发者可以自定义实现布局。默认只提供一个默认的下划关闭逻辑和 Activity 背景下沉的显示效果。

  • 自定义对话框 CustomDialog

    自定义对话框 CustomDialog

    根据定制化自由度的对话框组件,完全由用户自行实现布局内容。CustomDialog 提供了 ALIGN 选项可以轻松定制对话框弹出的方式,默认支持屏幕中央、屏幕底部、屏幕顶部、屏幕左侧、屏幕右侧多种弹出模式,也会提供相应的弹出动画效果,当然用户也可以自定义动画效果。

DialogX主题

DialogX主题

DialogX 采用了主题分离结构,主框架仅包含 Material 设计风格的对话框组件,您可以通过额外引入主题包来实现主题的扩展。

额外的,每套主题都包含亮色/暗色两种显示风格,您可以通过 DialogX 的设置自由切换对话框的显示效果。

主题设计开发者也可以通过使用 DialogX 提供的主题定制接口来实现自定义主题,或者对现有主题进行样式调整和修改。

你还可以更深入的 了解如何使用 DialogX 主题

你还可以更深入的 了解如何开发 DialogX 主题

Demo

您可以先下载 Demo 进行尝试:http://beta.kongzue.com/DialogXDemo

下载Demo

开始使用 DialogX

因为依赖的关系,DialogX 目前仅支持 AndroidX 作为基础进行开发,若您正在使用最新版本的 Android Studio,那么默认创建的项目就是使用 AndroidX 作为底层框架的,老版本 Android Support 兼容库将在后续更新。

以下四种引入方式请任选其一。

📥 引入

方式一:Gradle 引入 jitPack 源

最新版本: Jitpack.io
  1. 在 project 的 build.gradle 文件中找到 allprojects{} 代码块添加以下代码:
allprojects {
    repositories {
        google()
        jcenter()
        maven { url 'https://jitpack.io' }      //增加 jitPack Maven 仓库
    }
}

⚠️ 请注意,使用 Android Studio 北极狐版本(Arctic Fox)创建的项目,需要您前往 settings.gradle 添加上述 jitpack 仓库配置。

  1. 在 app 的 build.gradle 文件中找到 dependencies{} 代码块,并在其中加入以下语句:
def dialogx_version = "0.0.43.beta13"
implementation "com.github.kongzue.DialogX:DialogX:${dialogx_version}"

方式二:Gradle 引入 jCenter 源

⚠️ 警告:jCenter已停止运行!

想要在您的项目引入 DialogX,您需要在 app 的 build.gradle 文件中找到 dependencies{} 代码块,并在其中加入以下语句:

implementation 'com.kongzue.dialogx:DialogX:0.0.37'

方式三:直接引入 AAR 包文件

请前往 Release 页面根据需要版本的下载 AAR 包文件。

  1. 将 AAR 放入 libs 目录。

  2. 在 Module 的 build.gradle 里加入以下代码:

build.gradle
repositories{
    flatDir {
        dirs 'libs'
    }
}

implementation(name: 'AAR文件名', ext: 'aar')

▶️ 使用

如何使用

具体的使用说明,请参阅 DialogX Wiki

🧩 扩展包

目前 DialogX 依然仅提供最基础的对话框实现,不提供进阶的功能模块,这是为了避免是您的应用变得臃肿。

但为了保证一些常用功能,例如 地址选择、日期选择以及“分享到”对话框等较为通用且常见的功能更为简单的能够使用,我们提供了扩展包以满足这些需求。

扩展包中,各个模块是单独引入的,您无需担心引入不必要的功能和资源。

扩展包目前尚处于初步开发阶段,要预览或提出你的建议,请访问:DialogXSample

ℹ️ 使用过程遇到问题?

查看 常见问题

技术支持和反馈建议可以加讨论群:590498789

反馈 DialogX

🔁 如何从 DialogV3 迁移至 DialogX

请参考文章 从 DialogV3 迁移至 DialogX

开源协议

DialogX 遵循 Apache License 2.0 开源协议。

Copyright Kongzue DialogX

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • 【BUG反馈】

    【BUG反馈】

    BUG 反馈 PopMenu 在线程中修改数据导致闪退

    问题描述:

    在使用 PopMenu 进行展示时,我可能会随时修改传入的 menuList,所以在 PopMenu 进行初始化的时候,应该是将 menuList 进行一次重新的add添加,否则当我在外部修改 menuList 的时候,就会发生闪退,闪退的日志如下:

    java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. Make sure your adapter calls notifyDataSetChanged() when its content changes. [in ListView(2131231193, class com.kongzue.dialogx.util.views.PopMenuListView) with Adapter(class com.kongzue.dialogx.util.PopMenuArrayAdapter)]
    

    希望可以尽快修复一下,感谢。

    bug 
    opened by super-cc 55
  • BottomDialog 遮罩色

    BottomDialog 遮罩色

    BottomDialog 设置了遮罩色 (setMaskColor(Color.parseColor("#4D000000"))后 当使用setAllowInterceptTouch来切换触控拦截时候 遮罩色丢失。 比如:在fragment上有一个button切换BottomDialog 是否拦截touch, 当把setAllowInterceptTouch(true)后 遮罩色就直接丢失看不见了。即使把setAllowInterceptTouch(false)后遮罩色也没有再显示。总之,只要调用setAllowInterceptTouch函数切换 之前设置的遮罩层的颜色都看不见了

    另外: BottomDialog 在调用setCustomView自定义layout后 在向上滑动的时候 自定义layout会超过 imgTab

    bug 
    opened by Bruce8hou 19
  • CustomDialog使用id和fragment作为OnBindView的参数,表现不一致

    CustomDialog使用id和fragment作为OnBindView的参数,表现不一致

    BUG 反馈

    请先确认您已阅读《常见问题》

    问题描述:

    使用官网demo改造一下,做了个自定义底部弹出框俄罗斯套娃弹出。一个用layoutid,一个用fragment传入OnBindView 用id是一直弹出新的底部框符合预期 用fragment是替换,无动画效果,不符合预期,【且】。请看视频

    设备信息:

    请在此说明您使用的设备型号、Android 版本等信息以协助我们排查问题

    是否在 Demo 中能复现此问题?

    是/否/未尝试

    问题截图/视频

    id:

    https://user-images.githubusercontent.com/13625746/188605201-7c1ed18d-4c6e-4ca5-9a7e-af24a1977c0b.mp4

    fragment:

    https://user-images.githubusercontent.com/13625746/188605640-1998b75a-0487-45d9-9655-47dff3af5e43.mp4

    相应代码图: image

    bug 
    opened by AreYReady 16
  • 关于自定义view,并且连续显示dialog的问题

    关于自定义view,并且连续显示dialog的问题

    WaitDialog.show("正在登录") .setCustomView(object : OnBindView(R.layout.layout_wait_dialog) { override fun onBind(dialog: WaitDialog?, v: View?) { val load = v?.findViewById(R.id.iv_load) val animation = RotateAnimation( 0f, 360f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f ) animation.duration = 1000 animation.repeatCount = -1 animation.interpolator = LinearInterpolator() //旋转效果 load?.animation = animation } }) Handler(Looper.getMainLooper()).postDelayed({ // TipDialog.show("登录成功", WaitDialog.TYPE.SUCCESS) // 只用这一句的话,不会自动消失 WaitDialog.dismiss() TipDialog.show("登录成功") .setCustomView(object : OnBindView(R.layout.layout_success_dialog) { override fun onBind(dialog: WaitDialog?, v: View?) { } }) }, 1500)

    我这是一个模拟登陆的过程,这样写,第一个动画会跟第二个自定义view 重合显示,然后再消失,我尝试了好多种方式都不行,无奈给作者提个issue,想问问您有没有这种情况,版本就是用的最新的

    opened by Sky0202 16
  • 配合RXjava使用,个别情况下,MessageDialog弹出后,WaitDialog无法dissmiss

    配合RXjava使用,个别情况下,MessageDialog弹出后,WaitDialog无法dissmiss

    在doOnSubscribe()中show出WaitDialog,在doFinally()中dissmiss,然后再doOnComplete或者onError中展示MessageDialog。 个别情况下,MessageDialog显示后,WaitDialog会伴随MessageDialog一起显示且无法消失。

    opened by z2700589 16
  • 空指针

    空指针

    bugly上报的日志 不太清楚具体如何复现的 Attempt to invoke virtual method 'android.content.res.Resources android.content.Context.getResources()' on a null object reference android.view.animation.AnimationUtils.loadAnimation(AnimationUtils.java:155) com.kongzue.dialogx.dialogs.WaitDialog$DialogImpl$4.run(WaitDialog.java:466) android.os.Handler.handleCallback(Handler.java:883) android.os.Handler.dispatchMessage(Handler.java:100) android.os.Looper.loop(Looper.java:230) android.app.ActivityThread.main(ActivityThread.java:7991) java.lang.reflect.Method.invoke(Native Method) com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:526) com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1034)

    版本0.0.42 请问有什么方法可以尽量规避这种问题吗

    opened by MikeVoy 13
  • 【BUG反馈】dismiss动画的时候还可以点击

    【BUG反馈】dismiss动画的时候还可以点击

    BUG 反馈

    问题描述:

    我在使用PopMenu.show()方法时,然后进行了PopMenu的dismiss,PopMenu几乎已经全部消失,但在没有完全消失的时候,依然可以点击到Menu,应该在dismiss的时候,不进行点击回调,或增加开关。

    设备信息:

    此问题和设备无关。

    是否在 Demo 中能复现此问题?

    问题截图/视频

    暂无截图/视频

    bug 
    opened by super-cc 12
  • 手机显示放大后WaitDialog崩溃

    手机显示放大后WaitDialog崩溃

    用的DialogXIOSStyle,在手机显示放大后,loading动画导致崩溃; java.lang.IllegalArgumentException: x must be >= 0 at android.graphics.Bitmap.checkXYSign(Bitmap.java:547) at android.graphics.Bitmap.createBitmap(Bitmap.java:995) at com.kongzue.dialogx.style.views.ProgressView.getLoadingBitmap(ProgressView.java:211) at com.kongzue.dialogx.style.views.ProgressView.onDraw(ProgressView.java:188) at android.view.View.draw(View.java:21999) at android.view.View.updateDisplayListIfDirty(View.java:20859) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4621) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4594) at android.view.View.updateDisplayListIfDirty(View.java:20817) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4621) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4594) at android.view.View.updateDisplayListIfDirty(View.java:20817) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4621) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4594) at android.view.View.updateDisplayListIfDirty(View.java:20817) at android.view.View.draw(View.java:21726) at android.view.ViewGroup.drawChild(ViewGroup.java:4639) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4386) at android.view.View.draw(View.java:22002) at android.view.View.updateDisplayListIfDirty(View.java:20859) at android.view.View.draw(View.java:21726) at android.view.ViewGroup.drawChild(ViewGroup.java:4639) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:4386) at android.view.View.draw(View.java:22002) at com.android.internal.policy.DecorView.draw(DecorView.java:1173) at android.view.View.updateDisplayListIfDirty(View.java:20859) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:583) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:589) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:667) at android.view.ViewRootImpl.draw(ViewRootImpl.java:4317) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:4125) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3385) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2166) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8887) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1280) at android.view.Choreographer.doCallbacks(Choreographer.java:1019) at android.view.Choreographer.doFrame(Choreographer.java:911) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1248) at android.os.Handler.handleCallback(Handler.java:900) at android.os.Handler.dispatchMessage(Handler.java:103) at android.os.Looper.loop(Looper.java:219) at android.app.ActivityThread.main(ActivityThread.java:8668) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:513) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1109)

    还有bottommenu在列表数据很多的情况setSelection()导致卡顿。

    bug 
    opened by doiten 9
  • WaitDialog崩溃

    WaitDialog崩溃

    java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object java.lang.ref.WeakReference.get()' on a null object reference at com.kongzue.dialogx.dialogs.WaitDialog$DialogImpl.init(WaitDialog.java:305) at com.kongzue.dialogx.dialogs.WaitDialog$DialogImpl.lazyCreate(WaitDialog.java:270) at com.kongzue.dialogx.dialogs.WaitDialog$1.run(WaitDialog.java:209) at android.os.Handler.handleCallback(Handler.java:883) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7697) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

    持续关注 
    opened by kagurasansan 9
  • BottomMenu在我的魅族魅蓝U20上,高度为全屏

    BottomMenu在我的魅族魅蓝U20上,高度为全屏

    BottomMenu.show(contractNameList as List?) .setCancelButton("取消") .setSelection(contractSelectIndex) .setOnMenuItemClickListener { _, text, index -> btnContract.text = text contractSelectIndex = index return@setOnMenuItemClickListener false } }

    不知道是不是我的使用方式不对 但是在小米一款手机上正常得

    opened by Linnnnnn 9
  • 【BUG反馈】CustomDialog复用时动画失效

    【BUG反馈】CustomDialog复用时动画失效

    问题描述:

    CustomDialog第一次显示时,有动画效果,但是复用时,第二次显示就没有了动画效果

    设备信息:

    设备:华为Meta30 鸿蒙2.0系统

    是否在 Demo 中能复现此问题?

    未尝试

    问题截图/视频

    CustomDialog dialog; if(dialog==null){ dialog=CustomDialog.show(new OnBindView...);//有动画 }else{ dialog.show();//无动画 }

    bug 
    opened by JersonSU 8
  • 【功能建议】PopMenu 宽度自适应

    【功能建议】PopMenu 宽度自适应

    功能建议

    当view本身width小于 menu item的宽度时,menu的文本会被截取只显示部分,希望不要被截取,而是自适应 另外,回调能否区分backpressed,outsideclick?

    需求描述:

    实现参考:

     public void showInPopMenu(View view, CharSequence[] datas, SingleChooseDialogListener listener) {
            final boolean[] fromAction = {false};
            //左右15dp*2+16sp*文字
            String max = "";
            for (CharSequence data : datas) {
                if(data.toString().length() > max.length()){
                    max = data.toString();
                }
            }
            TextView textView = new TextView(view.getContext());
            textView.setTextSize(16);
            textView.setText(max);
            textView.measure(View.MeasureSpec.UNSPECIFIED,View.MeasureSpec.UNSPECIFIED);
            int width = textView.getMeasuredWidth() + SizeUtils.dp2px(30);
    
    
            String finalMax = max;
            PopMenu.show(view,datas)
                    .setOverlayBaseView(false)
                    //.setWidth(ScreenUtils.getScreenWidth())
                    //.setAlignGravity(Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL)
                    .setDialogLifecycleCallback(new DialogLifecycleCallback<PopMenu>() {
                        @Override
                        public void onShow(PopMenu dialog) {
                            super.onShow(dialog);
                            listener.onShow(dialog);
                            //确定最大长度:
                            //dialog.getMenuTextInfo()
                            LogUtils.w("view width: "+view.getMeasuredWidth()+", max Length text: "+width+",text: "+ finalMax);
                            if(width > view.getMeasuredWidth()){
                                dialog.setWidth(width);
                            }
                        }
    
                        @Override
                        public void onDismiss(PopMenu dialog) {
                            super.onDismiss(dialog);
                            //LogUtils.w("onDismiss");
                            //todo backpressed,outsideclick无法区分
                            if(!fromAction[0]){
                                listener.onCancel(false,true,false);
                            }
                            listener.onDismiss(false,true,false,false);
                        }
                    })
                    .setOnMenuItemClickListener(new OnMenuItemClickListener<PopMenu>() {
                        @Override
                        public boolean onClick(PopMenu dialog, CharSequence text, int index) {
                            fromAction[0] = true;
                           listener.onItemClicked(index,text);
                            return false;
                        }
                    });
        }
    
    
    enhancement 
    opened by hss01248 1
Releases(0.0.47.beta20)
  • 0.0.47.beta20(Dec 28, 2022)

    • 修复了 DialogFragment 实现模式下只显示一个对话框时,触摸事件穿透的问题;
    • 修复了 Window、DialogFragment 以及 FloatingActivity 模式下安全区动画闪烁的问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta19(Dec 25, 2022)

    • 修复了高版本安卓下,动态安全区判定bug,此问题会导致当同时显示多个对话框且输入法切换显示隐藏状态时,可能出现新对话框关闭后,之前显示的对话框无法正确置于安全区内的问题。
    • 修复了 beta16~18 存在的细节问题;

    后续版本更新说明,由于 jitpack 源和 MavenCentral 源同步更新困难,后续将主要基于 jitpack 源更新测试版本,当发布正式版本时同步至 MavenCentral。

    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta15(Dec 23, 2022)

  • 0.0.47.beta14(Dec 23, 2022)

    • WaitDialog 和 TipDialog 切换时支持在 dismiss 后直接 show,会取消衔接动画;
    • 修复上一个版本 MavenCentral 源引入后无法正常编译的问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta13(Dec 15, 2022)

  • 0.0.47.beta12(Dec 11, 2022)

    • 为 BottomDialog、BottomMenu 增加了 .setDialogLifecycleCallback(...) 的新实现 BottomDialogSlideEventLifecycleCallback,通过它可以监控由滑动引发的关闭事件:BottomDialogSlideEventLifecycleCallback#onSlideClose(dialog) 以及滑动过程:BottomDialogSlideEventLifecycleCallback#onSlideTouchEvent(dialog, v, event),当返回 true 时表示拦截操作,对话框不会继续关闭或处理滑动流程,可实现触摸事件接管;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta11(Dec 7, 2022)

  • 0.0.47.beta9(Dec 4, 2022)

    • InputInfo 新增 cursorColor、bottomLineColor 的 get/set 方法,用于设置 InputDialog 输入框的光标、底线颜色,也可以使用 .setThemeColor(ColorInt) 一键设置两个颜色;
    • GuideDialog 对 baseView 位置的识别更加精准了;
    • 增加了对 Google Ads 广告界面的豁免,以避免其背景显示出现问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta8(Nov 27, 2022)

    • 对初始化错误进行了明确区分来源的提示,以便于排查具体错误来源;
    • 对 BaseDialog#rootFrameLayout 进行了非静态化处理,减少内存泄漏的可能;
    • DialogX 不再对新创建的任何 activity 实例直接获取其 decorView,改为在对话框启动时获取,以解决可能造成的部分广告 SDK 的插屏广告背景变黑的问题;
    • 修复了 IOS 主题下,BottomDialog、BottomMenu 显示高度异常的问题;
    • 其他已知问题修复;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta7(Nov 26, 2022)

    • 针对穿山甲、友盟等SDK的特殊情况,在初始化 DialogX 后广告页会黑屏的问题进行了豁免性处理,DialogX 主动屏蔽对其 activity 的主动侦测,以避免出现问题;

    检测发现,一旦尝试获取穿山甲广告界面(Activity)的Window 的 getDecorView,注意,仅仅是获取,就会背景黑掉,不清楚原因,DialogX之所以不需要指定context的原理就是会自动获取当前顶层activity,目前的解决方案是屏蔽掉穿山甲包名来避免此问题。例如穿山甲的检测到是com.bytedance.sdk.openadsdk.stub.activity.Stub_Standard_Portrait_Activity,目前针对“com.bytedance.sdk.openadsdk.stub.activity”包下的都会屏蔽,你也可以手动配置黑名单,方法是:

    DialogX.unsupportedActivitiesPackageNames = new String[]{
        //你要配置的豁免包名      
    };
    

    目前已豁免的包名有:

    com.bytedance.sdk.openadsdk.stub.activity
    com.mobile.auth.gatewayauth
    

    如有其他通用的需要主动屏蔽的请提交 issues。

    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta6(Nov 23, 2022)

  • 0.0.47.beta5(Nov 23, 2022)

    • 为 BottomDialog、BottomMenu、FullScreenDialog、InputDialog、MessageDialog、TipDialog、WaitDialog 增加了 .setMaxHeight(int).setMinHeight(int).setMinWidth(int) 以及对应的 get 方法;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta4(Nov 16, 2022)

  • 0.0.47.beta3(Nov 16, 2022)

  • 0.0.47.beta2(Nov 2, 2022)

    • 修复 WaitDialog 宽度问题,现在当 WaitDialog 向 TipDialog 过度变化时若出现文本内容宽度变短,外边框宽度将保持不变;
    • 增加 WaitDialog 向 TipDialog 动画过度的衔接速度;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.47.beta1(Oct 20, 2022)

    • 为所有对话框组件增加了 .setRootPadding(allPadding).setRootPadding(paddingLeft, paddingTop, paddingRight, paddingBottom) 方法,单位为像素,用于设置对话框屏幕外边距;
    • PopMenu 新增了 .setPressedIndex(index) 方法,用于设置默认选中菜单的效果;
    • 修复了 PopMenu 和 PopNotification 的 DialogImpl 内容是私有成员,未公开可用的问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46(Oct 8, 2022)

    • 整合所有 0.0.46 beta 版本更新;

    ⬇️下载 aar 包:

    DialogX-0.0.46.aar DialogXIOSStyle-0.0.46.aar DialogXKongzueStyle-0.0.46.aar DialogXMaterialYou-0.0.46.aar DialogXMIUIStyle-0.0.46.aar

    AAR 包引入方法:

    1. 将 AAR 放入 libs 目录。
    2. 在 Module 的 build.gradle 里加入以下代码:
    build.gradle
    repositories{
        flatDir {
            dirs 'libs'
        }
    }
    
    implementation(name: 'AAR文件名', ext: 'aar')
    
    1. sync即可。

    图文详见:https://xiaozhuanlan.com/topic/0647532819

    Source code(tar.gz)
    Source code(zip)
    DialogX-0.0.46.aar(473.77 KB)
    DialogXIOSStyle-0.0.46.aar(80.31 KB)
    DialogXKongzueStyle-0.0.46.aar(44.54 KB)
    DialogXMaterialYou-0.0.46.aar(59.10 KB)
    DialogXMIUIStyle-0.0.46.aar(57.69 KB)
  • 0.0.46.beta16(Sep 27, 2022)

    • 修复 FullScreenDialog 存在的自定义布局高度为 match_parent ,但实际运行时默认启动依然只显示半屏需要滑出才能显示全屏的问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta15(Sep 13, 2022)

    • 修复 IOS 主题下的 ProgressView 的偶发性 bug issues:241
    • 修复 OnBindView 使用 Fragment 作为自定义 View 在同一 activity 下显示创建多个对话框时无法正常显示的问题;
    • PopMenu 提供 setBaseView(...) 方法和对应的 get 方法。

    ⬇️下载 aar 包:

    DialogX-0.0.46.beta15.aar DialogXIOSStyle-0.0.46.beta15.aar DialogXKongzueStyle-0.0.46.beta15.aar DialogXMaterialYou-0.0.46.beta15.aar DialogXMIUIStyle-0.0.46.beta15.aar

    AAR 包引入方法:

    1. 将 AAR 放入 libs 目录。
    2. 在 Module 的 build.gradle 里加入以下代码:
    build.gradle
    repositories{
        flatDir {
            dirs 'libs'
        }
    }
    
    implementation(name: 'AAR文件名', ext: 'aar')
    
    1. sync即可。

    图文详见:https://xiaozhuanlan.com/topic/0647532819

    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta14(Sep 8, 2022)

  • 0.0.46.beta13(Sep 7, 2022)

    • 增加所有对话框组件的 Lifecycle 支持;
    • 修复 CustomDialog#hideWithExitAnim 时对话框未能正确完全隐藏的 bug;
    • 修复 BottomMenu#setAllowInterceptTouch(false) 且菜单过长时可能导致部分菜单在屏幕外无法点击到的问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta12(Sep 5, 2022)

    • BottomDialog、BottomMenu、CustomDialog、FullScreenDialog、GuideDialog、InputDialog、MessageDialog、PopMenu、PopNotification、PopTip、TipDialog、WaitDialog 新增 .setDialogXAnimImpl(DialogXAnimInterface) 用于完全自定义启动和关闭动画;
    • PopMenu 增加 .hideWithExitAnim() 方法用于模拟关闭菜单动画的隐藏功能;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta11(Aug 31, 2022)

  • 0.0.46.beta10(Aug 26, 2022)

    ⚠️请使用 MaterialYou 主题的开发者注意此次更新变更!

    • MessageDialog、InputDialog、BottomDialog、BottomMenu、CustomDialog、GuideDialog、FullScreenDialog 增加了 .hideWithExitAnim(); 方法,使用它可以模拟关闭对话框的动画隐藏对话框,此方法只是隐藏对话框,不会真正关闭对话框,重新使用 .show() 命令即可恢复对话框的显示。
    • 修复了 MessageDialog、InputDialog、BottomDialog、BottomMenu、CustomDialog、GuideDialog、FullScreenDialog、PopNotification、PopTip 的 .hide() 方法隐藏对话框后,使用 .show()显示时无法恢复之前的显示状态问题;
    • 现在要使用 MaterialYou 主题需要 android.material 框架,MaterialYou 主题内的组件将逐步替换为 android.material 的官方组件和相关样式;
    • 尝试性提供了 FLOATING_ACTIVITY 模式在后台 Service 中启动的可能,方法请参照 Demo app 的源代码;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta9(Aug 23, 2022)

  • 0.0.46.beta8(Aug 22, 2022)

    • 新增 GuideDialog(Beta)用于实现引导点击提示;
    • 修正 PopNotification 部分接口名称定义的错误;
    • 修复部分组件背景遮罩存在的异常消失问题;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta7(Aug 19, 2022)

    • CustomDialog#ALIGN 新增 TOP_CENTER、TOP_LEFT、TOP_RIGHT、BOTTOM_CENTER、BOTTOM_LEFT、BOTTOM_RIGHT、LEFT_CENTER、LEFT_TOP、LEFT_BOTTOM、RIGHT_CENTER、RIGHT_TOP、RIGHT_BOTTOM 可以更精细的控制对话框的位置,额外的,TOP、LEFT、RIGHT、BOTTOM将默认改为等同于TOP_CENTER、LEFT_CENTER、RIGHT_CENTER、BOTTOM_CENTER,另外,TOP_LEFT和LEFT_TOP的区别在于入场出场动画方向不一样;
    • 修复 WaitDialog/TipDialog 的 ProgressView 在默认情况下动画衔接的bug;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta6(Aug 18, 2022)

    • FullScreenDialog 增加了非 VIEW 实现时,不支持使用 fragment 作为子布局的错误提示(Logcat),其原因为 Window 中不存在 FragmentManager,无法对子布局中的 fragment 进行管理;
    • 对 DialogFragment 实现模式下的沉浸式问题进行了处理;
    • WaitDialog/TipDialog 的 TYPE.NONE 标记为废弃,不建议使用此方法,此类型等同于直接使用 WaitDialog,因此请勿使用 TipDialog 并指定使用 TYPE.NONE,如有需要,请直接使用: WaitDialog.show(...);
    • 对 PopTip 在非 VIEW 实现模式下的触摸穿透问题进行了解决,修复了当 PopTip 背后存在其他不可穿透触摸的对话框时触摸事件传递给 activity 的 bug,此问题在默认的 VIEW 实现模式下不存在;
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta5(Aug 14, 2022)

    • FullScreenDialog 增加了方法 .setAllowInterceptTouch(false) 可以直接禁用滑动关闭功能;
    • TipDialog 的动画,由基于坐标的动画改为了基于时间的动画,现在在部分高分辨率的屏幕上动画更加流畅了,且可以通过 ProgressView.TIP_ANIMATOR_DURATION 调整动画时长
    Source code(tar.gz)
    Source code(zip)
  • 0.0.46.beta4(Aug 12, 2022)

    • MessageDialog、InputDialog、BottomDialog、BottomMenu 新增 .setTitleIcon(resId/drawable/bitmap) 用于设置 title 文字左侧的小图标。 效果如下图所示: image
    Source code(tar.gz)
    Source code(zip)
Owner
Kongzue
Professional wheel maker XD
Kongzue