Skip to content
Kongzue edited this page Aug 1, 2022 · 12 revisions

DialogXSample APIs

地址滚动选择对话框

简单例子:

CityPickerDialog.build()
        .show(new OnCitySelected() {
            /**
             * 此处为回调,
             * @param text 直接返回文本,例如“陕西省西安市未央区”
             * @param province 为省
             * @param city 为市
             * @param district 为区
             */
            @Override
            public void onSelect(String text, String province, String city, String district) {
                
                
            }
        });

更多 API:

.setTitle("Title")  //设置标题
.setDefaultSelect("陕西省", "西安市", "未央区")  //设置默认选中的省市区

日期滚动选择对话框

简单例子:

DatePickerDialog.build()
        .show(new OnDateSelected() {
            /**
             * 此处为回调,
             * @param text 直接返回默认文本,例如“2021-9-25”
             * @param year  年
             * @param month 月
             * @param day   日
             */
            @Override
            public void onSelect(String text, int year, int month, int day) {
            
            }
        });

更多 API:

.setTitle("Title")  //设置标题
.setMinTime(1990, 5, 20)            //指定最小可选日期 1990年5月20日
.setMaxTime(2030, 2, 10)            //指定最大可选日期 2030年2月10日
.setDefaultSelect(defaultYear, defaultMonth, defaultDay)    //设置默认选中日期

日历选择对话框(单选)

简单例子:

CalendarDialog.build()
        .show(new OnDateSelected() {
            /**
             * 此处为回调,
             * @param text 直接返回默认文本,例如“2021-9-25”
             * @param year  年
             * @param month 月
             * @param day   日
             */
            @Override
            public void onSelect(String text, int year, int month, int day) {
            
            }
        });

更多 API:

.setMinTime(1990, 5, 20)            //指定最小可选日期 1990年5月20日
.setMaxTime(2030, 2, 10)            //指定最大可选日期 2030年2月10日
.setDefaultSelect(defaultYear, defaultMonth, defaultDay)    //设置默认选中日期
.setShowLunarCalendar(true)         //开启农历/节日显示

日历选择对话框(多选)

简单例子:

CalendarDialog.build()
        .show(new OnMultiDateSelected() {
            /**
             * 此处为回调,
             * @param startText 起始日期文本,例如“2021-9-25”
             * @param endText 截至日期文本,例如“2021-9-26”
             * @param startYear  起始日期年
             * @param startMonth 起始日期月
             * @param startDay   起始日期日
             * @param endYear    截至日期年
             * @param endMonth   截至日期月
             * @param endDay     截至日期日
             */
            @Override
                    public void onSelect(String startText, String endText, int startYear, int startMonth, int startDay, int endYear, int endMonth, int endDay) {
            
            }
        });

更多 API:

.setMinTime(1990, 5, 20)            //指定最小可选日期 1990年5月20日
.setMaxTime(2030, 2, 10)            //指定最大可选日期 2030年2月10日
.setDefaultSelect(defaultYear, defaultMonth, defaultDay, defaultEndYear, defaultEndMonth, defaultEndDay)    //设置默认选中日期
.setMaxMultiDay(3)					//设置最多选3天

分享选择对话框(纵向堆叠图标样式)

简单例子:

List<ShareData> shareDataList = new ArrayList<>();
shareDataList.add(new ShareData(MainActivity.this, "QQ", R.mipmap.img_qq_ios));
shareDataList.add(new ShareData(MainActivity.this, "微信", R.mipmap.img_wechat_ios));
shareDataList.add(new ShareData(MainActivity.this, "邮件", R.mipmap.img_email_ios));
shareDataList.add(new ShareData(MainActivity.this, "待办事项", R.mipmap.img_remind_ios));
shareDataList.add(new ShareData(MainActivity.this, "微博", R.mipmap.img_weibo_ios));
shareDataList.add(new ShareData(MainActivity.this, "备忘录", R.mipmap.img_memorandum_ios));
ShareDialog.build()
        .setShareDataList(shareDataList)
        .show(new OnShareClick() {
            /**
             * 此处为回调,
             * @param context       返回上下文
             * @param shareData     返回点击的 ShareData 实例
             * @param shareButton   返回按钮
             * @param index         返回索引
             * @return              为 true 时,不自动关闭对话框
             */
            @Override
            public boolean onClick(Context context, ShareData shareData, View shareButton, int index) {

                return false;
            }
        });

更多 API:

.setTitle("Title")  //设置标题

//ShareData
shareData.setRadius(radius)    //启用强制圆角裁切(像素,基于原图像素裁切)

自定义联动滚动选择对话框

简单例子:

CustomWheelPickerDialog.build()
        .addWheel(new String[]{"小学", "初中", "高中"})    //添加列表项
        .setOnWheelChangeListener(new OnWheelChangeListener() {
            /**
             * 当滚轮滑动时触发
             * @param picker            滑动对话框
             * @param wheelIndex        当前是第几个列表项触发滑动
             * @param originWheelData   原始列表项数据
             * @param itemIndex         已选中数据的索引
             * @param itemText          已选中数据的内容
             */
            @Override
            public void onWheel(CustomWheelPickerDialog picker, int wheelIndex, String[] originWheelData, int itemIndex, String itemText) {
                
            }
        })
        .show(new OnCustomWheelPickerSelected() {
            /**
             * 当确认后,
             * @param picker        滑动对话框
             * @param text          返回默认文本,例如“初中 初4班 声乐组”
             * @param selectedTexts 选中的每个列表项文本集合
             * @param selectedIndex 选中的每个列表项索引集合
             */
            @Override
            public void onSelected(CustomWheelPickerDialog picker, String text, String[] selectedTexts, int[] selectedIndex) {
                
            }
        });

要完成联动,您需要自行处理多个列表项的数据变化,可以通过下述 API 完成对已添加的列表内数据的更换。

您也可以 查看样例代码(链接的代码中 onCustomWheelPicker 方法) 了解联动工作的范例。

更多 API:

.addWheel(new String[]{"语文组", "数学组", "英语组", "美术组", "音乐组"})  //添加更多的滑动项
.setDefaultSelect(0, 3)  //设置第1个滑动组件默认选中第4项(请指定索引值)
.setWheel(2, new String[]{"语文组", "数学组", "英语组", "美术组", "音乐组"})  //更换第3个滑动列表为指定内容
.getWheelSelectedIndex(1)  //获得第2个滑动组件选中的索引值
.getWheelSelected(1)  //获得第2个滑动组件选中的内容文本
.getWheel(1)  //获得第2个滑动组件的列表内容(String[])
.setTitle("Title")  //设置标题

底部弹出的评论输入对话框

简单例子:

ReplyDialog.build()
        .setTitle("回复 @Kongzue:")  //设置标题
        .setReplyButtonText("发送")  //设置按钮文字
        .setContentHint("请输入回复内容...")  //设置输入内容提示
        .show();

更多 API:

.setContent("内容")  //设置默认输入内容文本

文件选择对话框

要使用文件选择,请在 AndroidManifest.xml 的 <Application> 标签中插入属性:

android:requestLegacyExternalStorage="true"

然后在 Activity 中添加:

FileDialog fileDialog;

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (fileDialog != null) {
        fileDialog.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }
}

在申请权限时会自动处理相关业务。

选择文件简单例子:

FileDialog.build().selectFile(new FileSelectCallBack() {
    @Override
    public void onSelect(File file, String filePath) {
        PopTip.show("选择的文件:" + filePath);
    }
});

选择文件夹:

FileDialog.build().selectFolder(new FileSelectCallBack() {
    @Override
    public void onSelect(File file, String filePath) {
        PopTip.show("选择的文件夹:" + filePath);
    }
});

多选文件:

FileDialog.build().setMaxSelectionNumber(3)		//设置最多选3个文件
        .selectFile(new FileSelectCallBack() {
            @Override
            public void onMultiSelect(File[] file, String[] filePath) {
                for (String path : filePath) {
                    Log.i(">>>", "选中的文件: " + path);
                }
                PopTip.show("选中了" + filePath.length + "个文件");
            }
        });

限定类型:

FileDialog.build().setSuffixArray(new String[]{".jpg"})		//只允许 jpg 后缀
        .selectFile(new FileSelectCallBack() {
            @Override
            public void onSelect(File file, String filePath) {
                PopTip.show("选择的文件:" + filePath);
            }
        });

另外也可以通过 setMimeTypes(...) 设置文件 MimeType 类型限制;

修改对话框文案/颜色/图标的方式

例如针对 CalendarDialog,要修改其文案,请直接在 app 中的资源 res/strings.xml 或 res/colors.xml 中创建如下对于的字段:

修改文案:

    <string name="dialogx_date_picker_please_select_date">请选择日期</string>
    <string name="dialogx_date_picker_ok_button">确定</string>
    <string name="dialogx_date_picker_dialog_cancel">取消</string>
    <string name="dialogx_date_sunday">周日</string>
    <string name="dialogx_date_monday">周一</string>
    <string name="dialogx_date_tuesday">周二</string>
    <string name="dialogx_date_wednesday">周三</string>
    <string name="dialogx_date_thursday">周四</string>
    <string name="dialogx_date_friday">周五</string>
    <string name="dialogx_date_saturday">周六</string>
    <string name="error_dialogx_calendardialog_max_multi_select">请选择允许范围内的日期</string>

修改颜色:

    <color name="dialogXCalendarToday">#EB4D3D</color>
    <color name="dialogXCalendarSelected">#EB4D3D</color>

修改图标:

只需要提供与对话框资源相同名称的资源文件,直接放在 App 的 res 资源目录里即可。

其他对话框类似,多语言也可以通过复写上述 name 的资源实现。