# 日期选择器(选择一段时间)
**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/#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) {
}
})
```
如图:
#### 自定义属性说明
##### 全局文本大小
此属性在文本大小中优先级最低,如果手动设置了其它文本大小,此值不会对该文本生效
```xml
```
如图:
##### 顶部周文本相关自定义属性
1. 周文本大小
```xml
```
如图:
2. **周末** 的文本颜色与 **非周末** 的文本颜色
```xml
```
如图:
##### 顶部周信息与下方日期信息的分割线
1.分割线背景(或颜色)
支持使用clolor与drawable,使用drawable时需要注意设置分割线的高度,此处使用color作为示例
```xml
```
如图:
2. 分割线高度
```xml
```
如图:
3. 分割线是否可见(是否显示分割线)
枚举类型 和View的visibility属性一样,有 **visible** 、 **invisible** 和 **gone** 三种值
gone
```xml
```
如图:
invisible(众所周知,这个属性下,View不可见但占用宽高,为了和gone做明显对比,示例中对分割线设置了20dp)
```xml
```
如图:
visible状态下的分割线与默认状态一样
如图:
4. 分割线margin
分割线的margin **只支持上下margin** ,真需要左右margin可以提issue,我尽量做
```xml
```
如图:
也可以分别针对topMargin和bottomMargin单独设置
需要注意的是,单独设置的topMargin和bottomMargin会覆盖dividingLineMargin的值
```xml
```
##### 日期部分
1. 显示月份信息的文本大小
```xml
```
如图:
2. 显示月份信息的文本颜色
```xml
```
如图:
3. 显示月份信息的文本日期格式化
```xml
```
如图:
4. 日期选项的大小(由于默认的背景色看不出效果,此处设置了日期选项的正常背景色。注:日期选项的背景色分很多状态,需要分别设置,具体请往下继续查看)
选项大小最大值已经在内部做了动态计算,设置的值如果大于最大值,则使用最大值(默认值就是最大值)
```xml
```
如图:
5. 日期选项的背景色
背景色分为3种状态 正常状态,选中状态和不可用(未激活),关于不可用(未激活)状态的说明请继续往下查看
背景色的设置支持使用color与drawable,示例中仅以color作为展示
5.1 日期选项的正常背景色
此属性在上一个示例中已经展示,不再赘述
5.2 日期选项的选中背景色
示例中同时设置了正常背景色与选中背景色,以作对比,图中的 **2023年06月29日** 为选中状态
```xml
```
如图:
5.3 日期选项的不可用(未激活)背景色
```xml
```
如图:
5.4 日期选项的选中状态背景色-起始日期与结束日期
示例中同时设置了选中状态背景色,起始日期背景色,结束日期背景色以作对比,选中区间为 **2023年06月26日** 到 **2023年07月01日**
```xml
```
如图:
5.5 日期选项的空白日期格子的背景色
字面意思,界面中每个月前后不可避免的会有几天是空白的,通过这个字段可以设置空白处的背景色
```xml
```
如图:
6. 日期选项的文本大小
```xml
```
如图:
7. 日期选项的文本颜色
文本状态与背景色状态一一对应,但不区分起始与结束,此处示例同时设置了 正常状态、选中状态和不可用(未激活)状态的文本颜色
```xml
```
如图:
8. 日期选项,是否允许选择不可用(未激活)的日期
默认情况下,是不可以选择 **今天** 之前的日期的,当然,这个关键(激活)日期也是可以修改的,请往下继续查看
如果允许选择不可用(未激活)的日期,则不会有 **不可用(未激活)状态** 的日期选项
此处示例中,允许选择未激活日期,为了说明此时不会有不可用(未激活)状态,特意设置了 **不可用(未激活)状态背景色** 作对比
```xml
```
如图:
9. 最大可选天数
本项目一开始用于酒店项目,所以内部判断时,界面中选择2天表示1晚
此处设置3表示可选4天
```xml
```
如图:
10. 是否显示上一月的日期
由于酒店订房日期主要选择的是 **今天** 开始到后续的日期,所以默认不显示上一月日期
但如果是凌晨订房,就需要从 **昨天** 的日期开始订房,如果 **昨天** 刚好在上一月怎么办?
使用此属性以显示上月的日期
```xml
```
如图:
11. 设置不可用(未激活)日期
这个属性默认值为 **今天** ,即从 **今天** 起往后的日期才可选(包含 **今天** ), **今天** 之前的日期就是未激活
如果想变更这个 激活日期就用此属性,日期格式为yyyy/MM/dd,将日期变更为只能选择 **2023年07月01日** 及 **之后** 的日期
```xml
```
如图:
以上所有自定义属性都可以通过代码进行设置
还有一个不适合在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/)