封装好的Android对话框Dialog,包含了丰富的dialog样式、点击事件数据回传接口。直接调用封装好的方法即可操作dialog

Dialog在app中是很常见的,每次需要用到都去现创建是一件非常低效的方式。所以我封装了一个工具类,提供一些方法让开发者可以非常轻易地就能生成自己想要的样式的、并且功能完备的dialog,如:显示进度条对话框,或者dialog图标、标题、提示内容、按钮、单选列表、单选列表没有按钮、多选列表、使用自定义布局等等样式自由组合,并且提供操作对话框中点击事件的接口用于处理数据和页面变化等。
下面来看看主要代码:

dialog实现类BaseAchieveDialog.java主要代码:

    /**
     * 实现dialog样式设置的方法
     * 
     * @param builder
     */
    public void setStyle(AlertDialog.Builder builder) {
        builder.setIcon(mDialogInfoBean.getDialogIcon());
        builder.setTitle(mDialogInfoBean.getDialogTitle());
        final String[] dialogListItems = mDialogInfoBean.getDialogListItems();
        // 如果列表元素为空,或列表类型为空
        if (dialogListItems == null
                || mDialogInfoBean.getDialogListType() == null) {
            // 如果使用自定义的dialog布局
            if (mDialogInfoBean.getDialogViewId() != 0) {
                View view = LayoutInflater.from(mContext).inflate(
                        mDialogInfoBean.getDialogViewId(), null); // 自定义的dialog的布局
                builder.setView(view);
            } else { // dialog 1.没有使用列表样式,2.也没有使用自定义布局,则3.设置提示用户的信息,信息为空时该项将不显示
                builder.setMessage(mDialogInfoBean.getDialogMessage());
            }
        } else { // dialog采用列表布局
            creatList(builder, dialogListItems);
        }
    }

    /**
     * 创建dialog中的列表
     * 
     * @param builder
     * @param dialogListItems
     *            保存列表元素的数组
     */
    private void creatList(AlertDialog.Builder builder,
            final String[] dialogListItems) {
        switch (mDialogInfoBean.getDialogListType()) {
        case CreateDialog.SINGLE_CHOICE_NO_BTN: // 单选列表,点击即代表确认,没有按钮
            builder.setItems(dialogListItems, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    if (mICtrlDialogListener != null) {
                        // 因为没有按钮,点击就代表了确认,所以点击事件发生时直接将数据通过接口传递
                        mICtrlDialogListener.dialogOnClick(
                                dialogListItems[which], null);
                    }
                }
            });
            break;
        case CreateDialog.SINGLE_CHOICE: // 单选列表,点击代表选择,要确认或其他操作需要另外定义按钮
            builder.setSingleChoiceItems(dialogListItems, 0,
                    new OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 暂存到变量中
                            singleChoiceItem = dialogListItems[which];
                        }
                    });
            break;
        case CreateDialog.MULTI_CHOICE: // 多选列表,按钮需要另外定义
            builder.setMultiChoiceItems(dialogListItems, null,
                    new OnMultiChoiceClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which,
                                boolean isChecked) {
                            if (isChecked) {
                                // 暂存到列表中
                                multiChoiceItems.add(dialogListItems[which]);
                            }
                        }
                    });
            break;
        default:
            break;
        }
    }

    /**
     * 实现dialog按钮设置的方法
     * 
     * @param builder
     */
    public void setBtn(AlertDialog.Builder builder) {
        String[] dialogBtnType = mDialogInfoBean.getDialogBtnTypes();
        String[] dialogBtnName = mDialogInfoBean.getDialogBtnNames();
        String[] dialogListItems = mDialogInfoBean.getDialogListItems();
        // 如果按钮类型为空,或按钮名称为空,或(列表为单选无按钮类型并且列表元素不为空),则判定不生成按钮,此处什么都不做。
        if ((dialogBtnType == null)
                || (dialogBtnName == null)
                || ((mDialogInfoBean.getDialogListType() == CreateDialog.SINGLE_CHOICE_NO_BTN) && (mDialogInfoBean
                        .getDialogListItems() != null))) {

        } else if (dialogBtnType.length != dialogBtnName.length) { // 按钮类型和名称个数不匹配,不生成按钮
            Toast.makeText(mContext, "dialog按钮的类型和个数不匹配!", Toast.LENGTH_SHORT)
                    .show();
        } else if (dialogBtnType.length > 3) { // 按钮个数大于3个,不生成按钮
            Toast.makeText(mContext, "dialog按钮个数应该不大于3个!", Toast.LENGTH_SHORT)
                    .show();
        } else { // 生成按钮
            for (int i = 0; i < dialogBtnType.length; i++) {
                creatButton(builder, dialogBtnType, dialogBtnName,
                        dialogListItems, i);
            }
        }
    }

    /**
     * 创建dialog的按钮
     * 
     * @param builder
     * @param dialogBtnType
     *            按钮类型
     * @param dialogBtnName
     *            按钮名称
     * @param dialogListItems
     *            保存按钮名称的数组
     * @param i
     */
    private void creatButton(AlertDialog.Builder builder,
            String[] dialogBtnType, String[] dialogBtnName,
            final String[] dialogListItems, int i) {
        switch (dialogBtnType[i]) {
        case CreateDialog.POSITIVE: // 按钮类型,“确定”
            builder.setPositiveButton(dialogBtnName[i], new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // 如果列表元素为空,或列表的类型值为空,即为直接展示提示
                    if (dialogListItems == null
                            || mDialogInfoBean.getDialogListType() == null) {
                        if (mICtrlDialogListener != null) {
                            mICtrlDialogListener.dialogOnClick(
                                    CreateDialog.YES, null);
                        }

                    } else { // 列表元素和列表类型值都不为空时,则点击“确定”时保存与用户交互的数据
                        if (mICtrlDialogListener != null) {
                            if (mDialogInfoBean.getDialogListType() == CreateDialog.MULTI_CHOICE) {
                                mDialogInfoBean
                                        .setMultiChoiceItems(multiChoiceItems);

                                mICtrlDialogListener.dialogOnClick(
                                        CreateDialog.YES,
                                        mDialogInfoBean.getMultiChoiceItems());

                            } else {
                                mICtrlDialogListener.dialogOnClick(
                                        singleChoiceItem, null);
                            }
                        }
                    }
                    dialog.dismiss();
                }
            });
            break;

        case CreateDialog.NEGATIVE:
            builder.setNegativeButton(dialogBtnName[i], new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            break;

        case CreateDialog.NEUTRAL:
            builder.setNeutralButton(dialogBtnName[i], new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
            break;
        default:
            break;

        }
    }


    /**
     * 监听器
     */
    private ICtrlDialogListener mICtrlDialogListener;

    /**
     * 为dialog的按钮设置点击监听器的方法
     * 
     * @param mICtrlDialogListener
     */
    public void setICtrlDialogListener(ICtrlDialogListener mICtrlDialogListener) {
        if (mICtrlDialogListener != null) {
            this.mICtrlDialogListener = mICtrlDialogListener;
        }

    }

进度条对话框实现类ProgressDialogUtil.java主要代码:

/**
     * 实现初始化并显示进度条
     * @param title 标题
     * @param message 提示信息
     * @param progressMax 要下载的文件的总数
     */
    public void initProgress(String title, String message, int progressMax) {
        if (mProgressDialog != null) {
            mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
            mProgressDialog.setCancelable(false);
            mProgressDialog.setCanceledOnTouchOutside(false);
            mProgressDialog.setMax(progressMax);
            mProgressDialog.setTitle(title);
            mProgressDialog.setMessage(message);
            mProgressDialog.show();
        }
    }
    /**
     * 实现更新进度条
     * @param data
     */
    public void updateProgress(int data) {
        if (mProgressDialog != null) {
            mProgressDialog.setProgress(data);  
        }
    }
    /**
     * 当进度条已存在时,关闭进度条
     */
    public void dismiss(){
        if (mProgressDialog != null){
            mProgressDialog.dismiss();
        }
    }

dialog封装类CreateDialog.java中封装了如下方法:
基础的dialog:
1.1 setBaseDialog(String dialogTitle, String dialogMessage);
1.3 showBaseDialog()

更多自定义的dialog:
2.1 setDialogStyle(int dialogViewId, int dialogIcon, String
dialogTitle, String dialogMessage, String dialogListType);
2.2 setDialogBtnName(String… dialogBtnNames);
2.3 setDialogBtnType(String… dialogBtnType);
2.4 setDialogListItems(String… dialogListItems);
2.6 showDialog()

设置按钮点击事件,调用接口
1.2 && 2.5 setICtrlDialogListener(ICtrlDialogListener
mICtrlDialogListener)

进度条对话框
3.1 initUpdateProgress(int maxLen, int currentLen)
3.2 setProgressUpdate(int maxLen, int currentLen)
3.3 closeProgressDialog()

这些封装的方法主要都是使用javabean的方式完成的,就是写入和获取操作,在此就不多说了。

更多Android开发技术一起探讨学习,点我

更多Android开发资源直接下载,点我

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值