# 日期选择器(选择一段时间) **Repository Path**: sscl/range_date_pickers ## Basic Information - **Project Name**: 日期选择器(选择一段时间) - **Description**: 选择一段时间的日期选择器(不超过28天),限制月份只有当月,上月与下月,共3个月份(适用于酒店订房日期选择) - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2023-06-22 - **Last Updated**: 2024-10-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 日期选择器(选择一段时间) #### 介绍 选择一段时间的日期选择器(不超过28天),限制月份只有当月,上月与下月,共3个月份(适用于酒店订房日期选择) #### 软件架构 软件架构说明 #### 安装教程 当前最新版本:[![](https://jitpack.io/v/com.gitee.sscl/range_date_pickers.svg)](https://jitpack.io/#com.gitee.sscl/range_date_pickers) 1. 添加jitpack仓库 ```xml maven { url 'https://jitpack.io' } ``` 2. 引入远程仓库 tag为版本,版本在上方已经显示(或在release版本名称中) ```gradle implementation 'com.gitee.sscl:range_date_pickers:tag' ``` #### 使用说明 1. 像一个标准的View一样在xml中引入 或者在 代码中使用Context创建 注意:宽高 **不能使用wrap_content** ,可能会出现不显示或其它显示异常,可以 **使用match_parent** 或 **固定值** 2. 默认可以直接使用,没有有需要初始化的参数,只需设置回调即可获取选择的日期 ```kotlin rangeDatePickerView.setOnDateSelectChangedListener(object :OnDateSelectChangedListener{ /** * 日期选择回调 * @param startDate 选择的起始日期 * @param endDate 选择的结束日期 */ override fun onDataSelect(startDate: Date?, endDate: Date?, differDay: Int) { } /** * 选择的日期超过最大数量 * @param date 选择的日期 * @param dateMaxSelectCount 最大天数 * @param differDay 选择的日期包含的天数 */ override fun onDataRangeOutOfMax(date: Date, dateMaxSelectCount: Int, differDay: Int) { } }) ``` 如图:![默认效果](pic/%E9%BB%98%E8%AE%A4%E6%95%88%E6%9E%9C.png) #### 自定义属性说明 ##### 全局文本大小 此属性在文本大小中优先级最低,如果手动设置了其它文本大小,此值不会对该文本生效 ```xml ``` 如图:![全局文本大小](pic/%E5%85%A8%E5%B1%80%E6%96%87%E6%9C%AC%E5%A4%A7%E5%B0%8F.png) ##### 顶部周文本相关自定义属性 1. 周文本大小 ```xml ``` 如图:![周文本大小](pic/%E5%91%A8%E6%96%87%E6%9C%AC%E5%A4%A7%E5%B0%8F.png) 2. **周末** 的文本颜色与 **非周末** 的文本颜色 ```xml ``` 如图:![周末的文本颜色与非周末的文本颜色](pic/%E5%91%A8%E6%9C%AB%E4%B8%8E%E9%9D%9E%E5%91%A8%E6%9C%AB%E7%9A%84%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2.png) ##### 顶部周信息与下方日期信息的分割线 1.分割线背景(或颜色) 支持使用clolor与drawable,使用drawable时需要注意设置分割线的高度,此处使用color作为示例 ```xml ``` 如图:![分割线背景](pic/%E5%88%86%E5%89%B2%E7%BA%BF%E9%A2%9C%E8%89%B2.png) 2. 分割线高度 ```xml ``` 如图:![分割线高度](pic/%E5%88%86%E5%89%B2%E7%BA%BF%E9%AB%98%E5%BA%A6.png) 3. 分割线是否可见(是否显示分割线) 枚举类型 和View的visibility属性一样,有 **visible** 、 **invisible** 和 **gone** 三种值 gone ```xml ``` 如图:![分割线-gone](pic/%E5%88%86%E5%89%B2%E7%BA%BF%E5%8F%AF%E8%A7%81%E7%8A%B6%E6%80%81-gone.png) invisible(众所周知,这个属性下,View不可见但占用宽高,为了和gone做明显对比,示例中对分割线设置了20dp) ```xml ``` 如图:![分割线-invisible](pic/%E5%88%86%E5%89%B2%E7%BA%BF%E5%8F%AF%E8%A7%81%E7%8A%B6%E6%80%81-invisible.png) visible状态下的分割线与默认状态一样 如图:![输入图片说明](pic/%E9%BB%98%E8%AE%A4%E6%95%88%E6%9E%9C.png) 4. 分割线margin 分割线的margin **只支持上下margin** ,真需要左右margin可以提issue,我尽量做 ```xml ``` 如图:![输入图片说明](pic/%E5%88%86%E5%89%B2%E7%BA%BF-margin.png) 也可以分别针对topMargin和bottomMargin单独设置 需要注意的是,单独设置的topMargin和bottomMargin会覆盖dividingLineMargin的值 ```xml ``` ##### 日期部分 1. 显示月份信息的文本大小 ```xml ``` 如图:![输入图片说明](pic/%E6%9C%88%E4%BB%BD%E4%BF%A1%E6%81%AF%E7%9A%84%E6%96%87%E6%9C%AC%E5%A4%A7%E5%B0%8F.png) 2. 显示月份信息的文本颜色 ```xml ``` 如图:![输入图片说明](pic/%E6%9C%88%E4%BB%BD%E4%BF%A1%E6%81%AF%E7%9A%84%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2.png) 3. 显示月份信息的文本日期格式化 ```xml ``` 如图:![输入图片说明](pic/%E6%9C%88%E4%BB%BD%E4%BF%A1%E6%81%AF%E7%9A%84%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%E5%8C%96.png) 4. 日期选项的大小(由于默认的背景色看不出效果,此处设置了日期选项的正常背景色。注:日期选项的背景色分很多状态,需要分别设置,具体请往下继续查看) 选项大小最大值已经在内部做了动态计算,设置的值如果大于最大值,则使用最大值(默认值就是最大值) ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E7%9A%84%E5%A4%A7%E5%B0%8F.png) 5. 日期选项的背景色 背景色分为3种状态 正常状态,选中状态和不可用(未激活),关于不可用(未激活)状态的说明请继续往下查看 背景色的设置支持使用color与drawable,示例中仅以color作为展示 5.1 日期选项的正常背景色 此属性在上一个示例中已经展示,不再赘述 5.2 日期选项的选中背景色 示例中同时设置了正常背景色与选中背景色,以作对比,图中的 **2023年06月29日** 为选中状态 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E8%83%8C%E6%99%AF%E8%89%B2-%E9%80%89%E4%B8%AD%E7%8A%B6%E6%80%81.png) 5.3 日期选项的不可用(未激活)背景色 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E8%83%8C%E6%99%AF%E8%89%B2-%E4%B8%8D%E5%8F%AF%E7%94%A8.png) 5.4 日期选项的选中状态背景色-起始日期与结束日期 示例中同时设置了选中状态背景色,起始日期背景色,结束日期背景色以作对比,选中区间为 **2023年06月26日** 到 **2023年07月01日** ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E7%9A%84%E9%80%89%E4%B8%AD%E7%8A%B6%E6%80%81%E8%83%8C%E6%99%AF%E8%89%B2-%E8%B5%B7%E5%A7%8B%E6%97%A5%E6%9C%9F%E4%B8%8E%E7%BB%93%E6%9D%9F%E6%97%A5%E6%9C%9F.png) 5.5 日期选项的空白日期格子的背景色 字面意思,界面中每个月前后不可避免的会有几天是空白的,通过这个字段可以设置空白处的背景色 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E8%83%8C%E6%99%AF%E8%89%B2-%E7%A9%BA%E7%99%BD.png) 6. 日期选项的文本大小 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E7%9A%84%E5%A4%A7%E5%B0%8F.png) 7. 日期选项的文本颜色 文本状态与背景色状态一一对应,但不区分起始与结束,此处示例同时设置了 正常状态、选中状态和不可用(未激活)状态的文本颜色 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9%E6%96%87%E6%9C%AC%E9%A2%9C%E8%89%B2.png) 8. 日期选项,是否允许选择不可用(未激活)的日期 默认情况下,是不可以选择 **今天** 之前的日期的,当然,这个关键(激活)日期也是可以修改的,请往下继续查看 如果允许选择不可用(未激活)的日期,则不会有 **不可用(未激活)状态** 的日期选项 此处示例中,允许选择未激活日期,为了说明此时不会有不可用(未激活)状态,特意设置了 **不可用(未激活)状态背景色** 作对比 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9-%E5%85%81%E8%AE%B8%E9%80%89%E6%8B%A9%E4%B8%8D%E5%8F%AF%E7%94%A8%E6%97%A5%E6%9C%9F.png) 9. 最大可选天数 本项目一开始用于酒店项目,所以内部判断时,界面中选择2天表示1晚 此处设置3表示可选4天 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9-%E6%9C%80%E5%A4%A7%E5%8F%AF%E9%80%89%E5%A4%A9%E6%95%B0.png) 10. 是否显示上一月的日期 由于酒店订房日期主要选择的是 **今天** 开始到后续的日期,所以默认不显示上一月日期 但如果是凌晨订房,就需要从 **昨天** 的日期开始订房,如果 **昨天** 刚好在上一月怎么办? 使用此属性以显示上月的日期 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9-%E6%98%BE%E7%A4%BA%E4%B8%8A%E6%9C%88%E7%9A%84%E6%97%A5%E6%9C%9F.png) 11. 设置不可用(未激活)日期 这个属性默认值为 **今天** ,即从 **今天** 起往后的日期才可选(包含 **今天** ), **今天** 之前的日期就是未激活 如果想变更这个 激活日期就用此属性,日期格式为yyyy/MM/dd,将日期变更为只能选择 **2023年07月01日** 及 **之后** 的日期 ```xml ``` 如图:![输入图片说明](pic/%E6%97%A5%E6%9C%9F%E9%80%89%E9%A1%B9-%E5%8F%98%E6%9B%B4%E6%BF%80%E6%B4%BB%E6%97%A5%E6%9C%9F.png) 以上所有自定义属性都可以通过代码进行设置 还有一个不适合在xml中声明的功能,设置选中的开始日期与结束日期 设置的同时会触发回调,请注意处理相关逻辑 ```koltin rangeDatePickerView.setSelectDate(startDate,endDate) ``` 两个参数都可设置为空,当startDate为空时,endDate无效,和全空时效果一致,回调中的日期为全空 12. 选择模式的配置 有三种选择模式 independent continuous single independent:范围选择之独立选择 (每次选择完一个完整的范围后,新选择的日期都作为新的起始与结束) continuous:范围选择之连续选择(在已选择的日期范围的基础上额外扩选更多的选择项,需要取消选中只能点击已选择范围的首个或末尾的日期,或用上方的setSelectDate方法直接清空选择) single:单选模式,只能选择一个日期 如果还是不太了解可以直接下载运行测试 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)