Skip to content

Instantly share code, notes, and snippets.

@Blankj
Last active January 22, 2018 08:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Blankj/a2c26544112ad3b53aa03a1d8cb4fa16 to your computer and use it in GitHub Desktop.
Save Blankj/a2c26544112ad3b53aa03a1d8cb4fa16 to your computer and use it in GitHub Desktop.
[How to use XCTip2] #XCCommon

Download

Gradle:

// add it in repositories
maven { url 'http://xcserver:8082/nexus/content/repositories/releases/' }
// add it in dependencies
compile "com.ecarx:tip2:2.0.1"

API

API of XCToast

showShort: 显示短时吐司
showLong : 显示长时吐司
cancel   : 取消吐司显示

API of DialogFactory

createLoading      : 创建加载框
createMessage      : 创建消息对话框
createSelectItems  : 创建选项对话框
createSelectButtons: 创建选按钮对话框
createPicker       : 创建选择对话框

How to use

首先在你的 Application.class 中初始化 XCTip2,具体如下所示

// init it in ur class of Application
XCTip2.init(this);

然后配置换肤主题颜色属性,不同皮肤不同色哈。

<!-- XCDialog -->
<color name="ecarx_theme_main_color_pressed">#800CB7B4</color>
<color name="ecarx_theme_main_color">#FF0CB7B4</color>

如果要自定义 Toast 的话,可模仿 XCToast 的实现的方式,继承 ToastUtils 来传入自定义布局,由于 Toast 使用比较简单,根据 API 即可使用,不做过多介绍。

因为使用的是 DialogFragment,所以大家使用的 Activity 都应该是 FragmentActivity 的子类,由于初始化的时候我监听了 Activity 的生命周期,所以调用的时候无需传入相关的上下文来显示 Dialog,如果整个应用没有 Activity,那么需要创建一个继承于 FragmentActivity 的透明 Activity,在其中显示你需要显示的 Dialog,然后调用 startActivity 来间接显示 Dialog 即可,下面介绍其使用。

Loading

public void showLoading(View view) {
    if (loadingDialog == null) {
        loadingDialog = DialogFactory.createLoading(new LoadingDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setLoadingMessage("loading..."));
    }
    loadingDialog.show();
}

效果图如下所示。

loading.png

Message

Without Check

public void showMessageWithoutCheck(View view) {
    if (messageDialogWithoutCheck == null) {
        messageDialogWithoutCheck = DialogFactory.createMessage(new MessageDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setTitle("标题")
                .setMessage("这是带有标题和两个选择按钮的消息对话框,没有复选框。")
                .setLeftButton("确定", true, new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        XCToast.showLong("点了确定");
                        dialog.dismiss();// 返回 true 代表确定
                        return true;
                    }
                })
                .setRightButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        XCToast.showLong("点了取消");
                        dialog.dismiss();// 返回 false 代表取消
                        return false;
                    }
                }));
    }
    messageDialogWithoutCheck.show();
}

效果图如下所示。

message0.png

With Check

public void showMessageWithCheck(View view) {
    if (messageDialogWithCheck == null) {
        messageDialogWithCheck = DialogFactory.createMessage(new MessageDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setCanceled(false)
                .setMessage("这是带有复选框的对话框")
                .setLeftButton("确定", true, new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return true;
                    }
                })
                .setCheckBox(false, "不再提示", new MessageDialog.CheckedCallback() {
                    @Override
                    public void checkedCallback() {
                        XCToast.showLong("选择了复选框");
                    }
                }));
    }
    messageDialogWithCheck.show();
}

效果图如下所示。

message1.png

Select Items

public void showSelectItems(View view) {
    if (selectItemsDialog == null) {
        selectItemsDialog = DialogFactory.createSelectItems(new SelectItemsDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setSelectItems(new String[]{"未选中", "选中"}, 1,
                        new OnSelectListener() {
                            @Override
                            public void onSelect(Dialog dialog, int index) {
                                XCToast.showLong(String.valueOf(index));
                                dialog.dismiss();
                            }
                        })
                .setLeftButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return false;
                    }
                }));
    }
    selectItemsDialog.show();
}

效果图如下所示。

select_items.png

Select Buttons

Select Buttons With Message

public void showSelectButtonsWithMsg(View view) {
    if (selectButtonsDialog == null) {
        selectButtonsDialog = DialogFactory.createSelectButtons(new SelectButtonsDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setSelectButtons("下载“喜马拉雅电台”将使用22.9MB付费流量,下载应用?",
                        new String[]{"选项", "选项", "选项"},
                        new Boolean[]{true, false, false},
                        new OnSelectListener() {
                            @Override
                            public void onSelect(Dialog dialog, int index) {
                                XCToast.showLong(String.valueOf(index));
                                dialog.dismiss();
                            }
                        })
                .setLeftButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return false;
                    }
                }));
    }
    selectButtonsDialog.show();
}

效果图如下所示。

select_buttons0.png

Select Buttons Without Message

public void showSelectButtonsWithoutMsg(View view) {
    if (selectButtonsDialogNoMsg == null) {
        selectButtonsDialogNoMsg = DialogFactory.createSelectButtons(new SelectButtonsDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setTitle("标题")
                .setSelectButtons(new String[]{"蓝牙电话", "免费电话"},
                        new OnSelectListener() {
                            @Override
                            public void onSelect(Dialog dialog, int index) {
                                XCToast.showLong(String.valueOf(index));
                                dialog.dismiss();
                            }
                        })
                .setLeftButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return false;
                    }
                }));
    }
    selectButtonsDialogNoMsg.show();
}

效果图如下所示。

select_buttons1.png

Picker

Picker Single

public void showPickerSingle(View view) {
    if (PickerDialogSingle == null) {
        PickerDialogSingle = DialogFactory.createPicker(new PickerDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setTitle("标题")
                .setLeftButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return false;
                    }
                })
                .setRightButton("确定", true, new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return true;
                    }
                })
                .setPicker(2017, new OnPickListener() {
                    @Override
                    public void onPick(String result) {
                        XCToast.showLong(result);
                    }
                })
        );
    }
    PickerDialogSingle.show();
}

效果图如下所示。

picker0.png

Picker Multi

public void showPickerMulti(View view) {
    if (PickerDialogMulti == null) {
        PickerDialogMulti = DialogFactory.createPicker(new PickerDialog.Config()
                .setCanceledOnTouchOutside(false)
                .setLeftButton("取消", new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return false;
                    }
                })
                .setRightButton("确定", true, new OnClickListener() {
                    @Override
                    public boolean onClick(Dialog dialog, View view) {
                        dialog.dismiss();
                        return true;
                    }
                })
                .setPicker(2017, 8, new OnPickListener() {
                    @Override
                    public void onPick(String result) {
                        XCToast.showLong(result);
                    }
                })
        );
    }
    PickerDialogMulti.show();
}

效果图如下所示。

picker1.png

项目中使用到的 Dialog 如上已包括,后面讲解的 Config 为选看。

Demo的话可以参看 XCCommonapp 下的 tip 模块。

Config

以上四种 Dialog 创建都需要传入各自的 Conifg,其Config都继承于 BaseDialog.BaseConifg,相关 API 如下所示。

API of BaseDialog.BaseConfig

setSize                  : 设置Dialog尺寸
setWidth                 : 设置Dialog宽度
setHeight                : 设置Dialog高度
setGravity               : 设置Dialog位置
setAlpha                 : 设置Dialog透明度
setBg                    : 设置Dialog背景
setBgRes                 : 设置Dialog背景资源
setCanceled              : 设置点击取消是否可以关闭Dialog
setCanceledOnTouchOutside: 设置点击Dialog外围是否可以关闭Dialog
setOnCancelListener      : 设置取消回调事件

除了 LoadingDialog,带有标题和底部按钮的都继承自 BaseContentDialog,它的 Config 如下所示。

API of BaseContentDialog.Config

setTitle      : 设置标题
setLeftButton : 设置左按钮
setRightButton: 设置右按钮

如果底部只需要一个按钮,那么只需从 setLeftButtonsetRightButton 任选其一即可。

完结 撒花

Update Log

  • 2.0.1: 发布第一版(18/01/22)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment