【DIalogX对话框,Android 开源对话框】

DialogX优势

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

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

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

✅DialogX的特性:

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

源码地址:https://github.com/kongzue/DialogX

使用

添加仓库

allprojects {
    
    
    repositories {
    
    
        google()
        jcenter()
        mavenCentral()      //增加 mavenCentral 仓库
    }
}


//或者这个,MavenCentral源是稳定版本,Jitpack 源会更新快速迭代测试版本
allprojects {
    
    
    repositories {
    
    
        google()
        jcenter()
        maven {
    
     url 'https://jitpack.io' }      //增加 jitPack Maven 仓库
    }
}

添加依赖

    //https://github.com/kongzue/DialogX对话框
    def dialogX_version = "0.0.48"
    implementation "com.github.kongzue.DialogX:DialogX:${dialogX_version}"
    //样式
    implementation "com.github.kongzue.DialogX:DialogXIOSStyle:${dialogX_version}"
    implementation "com.github.kongzue.DialogX:DialogXKongzueStyle:${dialogX_version}"
    implementation "com.github.kongzue.DialogX:DialogXMIUIStyle:${dialogX_version}"
//几个额外的扩展对话框,按需添加
def DialogXSample_version = "0.0.9"
    //地址选择对话框
    implementation "com.github.kongzue.DialogXSample:CityPicker:${DialogXSample_version}"

    //日期选择对话框
    implementation "com.github.kongzue.DialogXSample:DatePicker:${DialogXSample_version}"

    //回复消息对话框
    implementation "com.github.kongzue.DialogXSample:ReplyDialog:${DialogXSample_version}"

Application配置

//对话框配置
DialogX.init(this);
//设置主题样式,按需配置
DialogX.globalStyle= MaterialStyle.style();
DialogX.onlyOnePopTip = true;
DialogX.globalTheme= DialogX.THEME.LIGHT;

示例

基础对话框

在这里插入图片描述

输入对话框

在这里插入图片描述

底部菜单

在这里插入图片描述
在这里插入图片描述

简单消息提示,可当作Toast

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

阻断式提示

在这里插入图片描述在这里插入图片描述

评论输入框

在这里插入图片描述

日期选择

在这里插入图片描述
在这里插入图片描述

半自定义对话框

在这里插入图片描述

全自定义对话框

在这里插入图片描述

还有很多,官方例子还有登录等弹出,还有多种样式可使用,非常不错,强烈推荐
在这里插入图片描述
这是我自己创建的一个对话框管理类,写的不好,欢迎提建议。

/**
 * @author 饼子会飞
 * @version 1.0         DialogX对话框的管理类,方便管理
 * @data 2023/6/27 16:06
 */
public final class DialogManager {
    
    
    private static volatile DialogManager instance;

    /**
     * @Author 饼子会飞
     * @Description 私有化构造方法
     * @Date 2023/8/5 16:34
     **/
    private DialogManager() {
    
    
    }

    /**
     * @Author 饼子会飞
     * @Description 双重检查锁单例实现
     * @Date 2023/8/5 16:23
     **/
    public static DialogManager getInstance(){
    
    
        if (instance==null){
    
    
            synchronized (DialogManager.class){
    
    
                if (instance==null){
    
    
                    instance=new DialogManager();
                }
            }
        }
        return instance;
    }

    /**
     * @Author 饼子会飞
     * @Description 对话框
     * @Date 2023/8/5 16:15
     **/
    public MessageDialog msgDialog(String title,String message,String okText,String cancelText){
    
    
        return new MessageDialog(title,message,okText,cancelText);
    }
    /**
     * @Author 饼子会飞
     * @Description 简单对话框
     * @Date 2023/8/5 16:15
     **/
    public MessageDialog simpleMSGDialog(String title,String message){
    
    
        return new MessageDialog(title,message,"确定","取消");
    }
    /**
     * @Author 饼子会飞
     * @Description 输入框对话框
     * @Date 2023/8/5 16:15
     **/
    public InputDialog inputDialog(String title,String message,String okText,String cancelText){
    
    
        return new InputDialog(title,message,okText,cancelText);
    }
    /**
     * @Author 饼子会飞
     * @Description 简单的输入框对话框
     * @Date 2023/8/5 16:15
     **/
    public InputDialog simpleInputDialog(String title){
    
    
        return new InputDialog(title,"","确定","取消");
    }
    private long mPressedTime = 0;
    /**
     * @Author 饼子会飞
     * @Description 等待对话框
     * @Date 2023/8/5 16:16
     **/
    public WaitDialog waitDialog(String title){
    
    
        return WaitDialog.show(title).setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
    
    
            @Override
            public boolean onBackPressed(WaitDialog dialog) {
    
    
                tip(dialog);
                return false;
            }
        });
    }
    private void tip(WaitDialog dialog){
    
    
        long mNowTime = System.currentTimeMillis(); // 获取当前时间
        if ((mNowTime - mPressedTime) > 2000) {
    
    
            popTip("再按一次取消显示");
            mPressedTime = mNowTime;
        } else {
    
    
            dialog.doDismiss(); // 关闭对话框
        }
    }
    /**
     * @Author 饼子会飞
     * @Description 需要上下文的等待对话框
     * @Date 2023/8/5 16:16
     **/
    public WaitDialog waitDialogContext(Activity activity, String title){
    
    
        return WaitDialog.show(activity,title).setOnBackPressedListener(new OnBackPressedListener<WaitDialog>() {
    
    
            @Override
            public boolean onBackPressed(WaitDialog dialog) {
    
    
                tip(dialog);
                return false;
            }
        });
    }

    /**
     * @Author 饼子会飞
     * @Description 简单提示(等待对话框)
     * @Date 2023/8/5 16:16
     **/
    public void tipDialog(String message, WaitDialog.TYPE tip){
    
    
        TipDialog.show(message, tip);
    }

    /**
     * @Author 饼子会飞
     * @Description 成功提示后关闭页面
     * @Date 2023/8/5 16:17
     **/
    public void succeedDialog(String message){
    
    
        TipDialog.show(message, WaitDialog.TYPE.SUCCESS).setDialogLifecycleCallback(new DialogLifecycleCallback<WaitDialog>() {
    
    
            @Override
            public void onDismiss(WaitDialog dialog) {
    
    
                super.onDismiss(dialog);
                dialog.getOwnActivity().finish();
            }
        });
    }

    /**
     * @Author 饼子会飞
     * @Description 底部菜单
     * @Date 2023/8/5 16:17
     **/
    public BottomMenu bottomMenu(String[] itemList){
    
    
        BottomMenu bottomMenu=BottomMenu.build();
        bottomMenu.setMenuList(itemList);
        bottomMenu.setMenuTextInfo(new TextInfo().setGravity(Gravity.CENTER));
        bottomMenu.setTitleTextInfo(new TextInfo().setGravity(Gravity.CENTER));
        return bottomMenu;
    }
    /**
     * @Author 饼子会飞
     * @Description 底部菜单
     * @Date 2023/8/5 16:17
     **/
    public BottomMenu bottomMenu(List<String> itemList){
    
    
        BottomMenu bottomMenu=BottomMenu.build();
        bottomMenu.setMenuStringList(itemList);
        bottomMenu.setMenuTextInfo(new TextInfo().setGravity(Gravity.CENTER));
        bottomMenu.setTitleTextInfo(new TextInfo().setGravity(Gravity.CENTER));
        return bottomMenu;
    }

    /**
     * @Author 饼子会飞
     * @Description 简单的消息提示
     * @Date 2023/8/5 16:17
     **/
    public PopTip popTip(String message){
    
    
        return PopTip.show(message);
    }
    /**
     * @Author 饼子会飞
     * @Description 提示后关闭界面
     * @Date 2023/8/5 16:17
     **/
    public PopTip haveFinishPopTip(String message){
    
    
        return PopTip.show(message).setDialogLifecycleCallback(new BottomDialogSlideEventLifecycleCallback<PopTip>() {
    
    
            @Override
            public void onDismiss(PopTip dialog) {
    
    
                super.onDismiss(dialog);
                dialog.getOwnActivity().finish();
            }
        });
    }
    /**
     * @Author 饼子会飞
     * @Description 引导
     * @Date 2023/8/5 16:17
     **/
    public GuideDialog guideDialog(){
    
    
        return GuideDialog.build();
    }

    /**
     * @Author 饼子会飞
     * @Description 菜单
     * @Date 2023/8/5 16:18
     **/
    public PopMenu popMenu(CharSequence[] menus){
    
    
        return PopMenu.show(menus);
    }
    /**
     * @Author 饼子会飞
     * @Description 自定义对话框
     * @Date 2023/8/5 16:18
     **/
    public CustomDialog customDialog(){
    
    
        return CustomDialog.build();
    }

    /**
     * @Author 饼子会飞
     * @Description 评论对话框
     * @Date 2023/8/5 16:18
     **/
    public ReplyDialog replyDialog(String title){
    
    
        return ReplyDialog.build().setTitle(title).setReplyButtonText("发送");
    }
    /**
     * @Author 饼子会飞
     * @Description 日期选择
     * @Date 2023/8/5 16:18
     **/
    public CalendarDialog calendarDialog(){
    
    
        Date date=new Date(System.currentTimeMillis());
        Calendar calendar=Calendar.getInstance();
        calendar.setTime(date);
        return CalendarDialog.build().setShowLunarCalendar(true)
                .setDefaultSelect(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH)+1,calendar.get(Calendar.DAY_OF_MONTH));
    }

    /**
     * @Author 饼子会飞
     * @Description 日期选择
     * @Date 2023/8/5 16:19
     **/
    public DatePickerDialog datePickerDialog(){
    
    
        return DatePickerDialog.build();
    }
    
    /**
     * @Author 饼子会飞
     * @Description 地址选择
     * @Date 2023/8/5 16:19
     **/
    public CityPickerDialog cityPickerDialog(){
    
    
        return CityPickerDialog.build();
    }

    /**
     * @Author 饼子会飞
     * @Description xPopup的对话框
     * @Date 2023/8/5 16:19
     **/
    public XPopup.Builder xPopup(Context context){
    
    
        return new XPopup.Builder(context);
    }

    /**
     * @Author 饼子会飞
     * @Description 消息通知
     * @Date 2023/8/5 16:22
     **/
    public PopNotification popNotification(String title,String message){
    
    
        return PopNotification.show(title,message).showLong();
    }
}

管理类封装了多种常用的对话框,简单食用,如有疑问,欢迎评论,具体使用,可参考https://github.com/kongzue/DialogX/wiki

管理类使用示例

DialogManager.getInstance().msgDialog("提示", "当前安装包已下载,是否安装或继续下载?",
                           "安装","继续下载")
                    .setOkButton(new OnDialogButtonClickListener<MessageDialog>() {
    
    
                        @Override
                        public boolean onClick(MessageDialog dialog, View v) {
    
    
                            install();
                            return false;
                        }
                    })
                    .setCancelButton(new OnDialogButtonClickListener<MessageDialog>() {
    
    
                        @Override
                        public boolean onClick(MessageDialog dialog, View v) {
    
    
                            downLoad(up_address);
                            return false;
                        }
                    }).show();

猜你喜欢

转载自blog.csdn.net/butterfly_new/article/details/132145285