HarmonyOS 鸿蒙一款基于ArkTs+ArkUI开发的常用日历组件
HarmonyOS 鸿蒙一款基于ArkTs+ArkUI开发的常用日历组件
cjcalendar
简介
cjcalendar 是一款日常开发常用的日历组件,内部集成常规、单选、时间范围选择、多选、自定义日期每项显示等.
下载安装
ohpm install cjcalendar
使用方式
import { CJCalendar } from ‘cjcalendar’
CJCalendar()
一、各项属性
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
optMode | OptMode | 否 | 操作模式,常规、单选、一段时间、多选:默认:OptMode.NORMAL |
startDate | Date | 否 | 开始日期:默认:new Date(1970, 0, 1) |
endDate | Date | 否 | 截止日期:默认:当前时间+10年 |
titleHeight | Length | 否 | 标题栏高度:默认:50vp |
weeks | string[] | 否 | 星期标题,默认:[“日”,“一”,“二”,“三”,“四”,“五”,“六”,] |
weekTitleFontSize | number | string | Resource | 否 | 星期标题字体大小,默认:12 |
weekTitleFontColor | ResourceColor | 否 | 星期标题字体颜色,默认:"#9E9E9E" |
weekTitleBackgroundColor | ResourceColor | 否 | 星期标题背景色颜色,默认未设置 |
weekTitleHeight | Length | 否 | 星期标栏高度,默认:40 |
titleFontSize | number | string | Resource | 否 | 标题字体大小,默认:18 |
titleFontColor | ResourceColor | 否 | 标题字体颜色,默认:"#252a34" |
showFastToday | boolean | 否 | 是否显示快捷 今,默认:true |
fastTodayFontSize | number | string | Resource | 否 | 快捷返回今天,字体大小,默认:12 |
fastTodayFontColor | Resource | 否 | 快捷返回今天,字体颜色,默认:"#FFFFFF" |
fastTodayBg | Resource | 否 | 快捷返回今天,背景颜色,默认与todayFontColor一致 |
itemFontSize | number | string | Resource | 否 | 日期每一项字体大小,默认:18 |
itemFontColor | Resource | 否 | 日期每一项字体颜色,默认:"#252a34" |
itemFontWeight | Resource | 否 | 日期每一项字体,默认:FontWeight.Normal |
todayFontColor | ResourceColor | 否 | “今”日字体颜色,默认:"#03A9F4" |
disabledFontColor | ResourceColor | 否 | 不能使用的日期字体颜色,默认:"#9E9E9E" |
selectFontColor | ResourceColor | 否 | 选中日期字体颜色,默认:"#FFFFFF" |
selectItemBgColor | ResourceColor | 否 | 选中日期背景颜色, 默认与todayFontColor一致 |
optMode | OptMode | 否 | 操作类型,默认:NORMAL |
rangeStyle | SelectedStyle | 否 | SelectedStyle.ALONE 独立风格,SelectedStyle.CLOSE 封闭风格,默认:SelectedStyle.ALONE 独立圆形选中风格 |
extremityRadius | number | 否 | optMode == OptMode。RANGE且rangeStyle==SelectedStyle.CLOSE 时生效,两头选项的圆角 |
showTime | boolean | 否 | 是否显示时间选择,默认:false |
timeFontSize | number | string | Resource | 否 | 时间选择器字体大小,默认:18 |
timeFontColor | ResourceColor | 否 | 时间选择器字体颜色,默认:item 字体颜色 |
二、常用方法
方法 | 参数 | 返回 | 必填 | 说明 |
---|---|---|---|---|
cellLayout | item: CJDateItem | - | 否 | 自定义每一项布局 |
cusCellMainLayout | item: CJDateItem,params: CellFontStyle | - | 否 | 仅自定义日期文字区 |
selectedBackgroundLayout | item: CJDateItem | - | 否 | 仅自定义选中背景样式区 |
titleCenterLayout | - | - | 否 | 自定义日期标题中心内容 |
titleLeftLayout | - | - | 否 | 自定义日期标题左边内容 |
titleRightLayout | - | - | 否 | 自定义日期标题右边内容 |
todayLayout | item: CJDateItem | - | 否 | 仅自定义 今日 样式,当使用cellLayout时,tadayLayout无效 |
fastTodayLayout | - | - | 否 | 快捷回到今天自定义布局 |
disableCellClick | item: CJDateItem | - | 否 | 点击不可用item时的事件响应 |
reBuildDateItem | item: CJDateItem | CJDateItem | 否 | 计算item时,如需添加更多自定义属性时使用 |
onDateChange | date1: CJDateItem | Array<CJDateItem>, date2?: CJDateItem | - | 否 | 选择变化监听,OptMode.NORMAL/OptMode.SINGLE,只返:date1;OptMode.RANGE:两个都返,date1为开始时间,date2为结束时间;MULTIPLE:返回Array<CJDateItem>,已选中的日期 |
onTimeChange | time1: CJTimeItem, time2?: CJTimeItem | - | 否 | 时间选择改变监听 |
onMonthChange | after: Date, befor: Date | - | 否 | 月份改变回调:after 改变后,befor:改变前 |
cusTopLayout | preMonth?: () => void, nextMonth?: () => void, backToday?: () => void | - | 否 | 自定义顶部布局,可结合cusTopStateListener使用 |
cusTopStateListener | title?: string, hasPre?: boolean, hasNext?: boolean, showFastToday?: boolean | - | 否 | 自定义顶部布局时,可直接使用该状态回调用于控制顶部状态 |
三、CJDateItem通用属性
属性 | 类型 | 描述 |
---|---|---|
fullYear | number | 年 |
month | number | 月 |
date | number | 日期 |
week | number | 星期 |
time | number | 时间戳 |
四、OptMode 操作模式
属性 | 描述 |
---|---|
NORMAL | 常规 |
SINGLE | 单选 |
RANGE | 一段时间 |
MULTIPLE | 多选 |
五、SelectedStyle 选中样式风格
属性 | 描述 |
---|---|
ALONE | 独立选中风格:默认圆形独立 |
CLOSE | 封闭选中风格:默认举行封闭 |
五、使用案例
1、直接使用
import { CJCalendar } from ‘cjcalendar’
CJCalendar()
2、范围选择
CJCalendar({
// 范围选择
optMode: OptMode.RANGE,
rangeStyle: SelectedStyle.CLOSE,// 默认 SelectedStyle.ALONE
// 日期选择变化监听
onDateChange: (start: CJDateItem, end: CJDateItem) => {
console.log(TAG, “start:”, JSON.stringify(start))
console.log(TAG, “end:”, JSON.stringify(end))
},
})
3、多选
CJCalendar({
// 范围选择
optMode: OptMode.MULTIPLE,
// 日期选择变化监听
onDateChange: (dates: CJDateItem[]) => {
console.log(TAG, “dates:”, JSON.stringify(dates))
},
})
4、修改主题色
CJCalendar({
// 范围选择
optMode: OptMode.MULTIPLE,
// 修改主题色
todayFontColor: “#00897B”,
// 日期选择变化监听
onDateChange: (dates: CJDateItem[]) => {
console.log(TAG, “dates:”, JSON.stringify(dates))
},
})
5、限制开始日期、截止日期
CJCalendar({
// 范围选择
optMode: OptMode.RANGE,
// 修改主题色
todayFontColor: “#E64A19”,
// 开始日期
startDate: new Date(2024, 2, 3),
// 截止日期
endDate: new Date(2024, 2, 20),
// 日期选择变化监听
onDateChange: (date1: CJDateItem, date2: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
console.log(TAG, “date2:”, JSON.stringify(date2))
},
})
6、自定义排版布局
CJCalendar({
// 范围选择
optMode: OptMode.RANGE,
// 修改主题色
todayFontColor: “#E64A19”,
// 开始日期
startDate: new Date(2024, 2, 3),
endDate: new Date(2024, 2, 20),
// 自定义每项排版布局
cellLayout: (date: CJDateItem) => {
this.cellLayout(date)
},
// 日期选择变化监听
onDateChange: (date1: CJDateItem, date2: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
console.log(TAG, “date2:”, JSON.stringify(date2))
},
})
@Builder cellLayout(item: CJDateItem) {
Column() {
Text(item.date + “”)
.fontSize(18)
.fontColor(item.isPre || item.isNext ? “#CCCCCC” : “#323232”)
Text(“你好”)
.fontSize(12)
}
}
7、自定义顶部布局
CJCalendar({
// 范围选择
optMode: OptMode.RANGE,
// 修改主题色
todayFontColor: “#E64A19”,
// 开始日期
startDate: new Date(2024, 2, 3),
endDate: new Date(2024, 2, 20),
cusTopLayout: (
preMonth: () => void,
nextMonth: () => void,
backToday: () => void,
) => {
this.cusTopLayout(preMonth, nextMonth, backToday)
},
cusTopStateListener: (title?: string,
hasPre?: boolean,
hasNext?: boolean,
showFastToday?: boolean) => {
this.title = title
}
})
@Builder cusTopLayout(preMonth: () => void,
nextMonth: () => void,
backToday: () => void) {
Column() {
Row() {
Button(“上一月”)
.onClick(() => {
preMonth()
})
Text(this.title)
Button(“下一月”)
.onClick(() => {
nextMonth()
})
Button(“今天”)
.onClick(() => {
backToday()
})
}
.justifyContent(FlexAlign.Center)
.width(“100%”)
</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">Text</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">"广告位啥的你来加"</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">width</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">"100%"</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">height</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-number"><span class="hljs-function"><span class="hljs-params"><span class="hljs-number">100</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">fontSize</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-number"><span class="hljs-function"><span class="hljs-params"><span class="hljs-number">20</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">backgroundColor</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">"#ffcfdf"</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">fontColor</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">"#112d4e"</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">textAlign</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(TextAlign.Center)</span></span></span><span class="hljs-function">
}
.</span><span class="hljs-title"><span class="hljs-function"><span class="hljs-title">width</span></span></span><span class="hljs-params"><span class="hljs-function"><span class="hljs-params">(</span></span><span class="hljs-string"><span class="hljs-function"><span class="hljs-params"><span class="hljs-string">"100%"</span></span></span></span><span class="hljs-function"><span class="hljs-params">)</span></span></span><span class="hljs-function">
}
8、初始化选中项
a、多选默认项
CJCalendar({
selectedDates: [
“2024-03-12”,
“2024-03-15”,
“2024-03-18”,
“2024-03-28”
],
optMode: OptMode.MULTIPLE,
onDateChange: (dates: CJDateItem[]) => {
console.log(TAG, “date1:”, JSON.stringify(dates))
},
})
b、范围选择默认项
CJCalendar({
selectedDates: [
“2024-03-05”,
“2024-03-13”,
],
optMode: OptMode.RANGE,
onDateChange: (date1: CJDateItem, date2: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
console.log(TAG, “date2:”, JSON.stringify(date2))
},
})
c、单选择默认项
CJCalendar({
selectedDates: [
“2024-03-11”,
],
optMode: OptMode.SINGLE,
onDateChange: (date1: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
},
})
9、自定义选中样式
a、自定义独立选中风格样式
CJCalendar({
optMode: OptMode.RANGE,
rangeStyle: SelectedStyle.CLOSE,// ALONE:独立风格, CLOSE:封闭风格
selectedBackgroundLayout: (item: CJDateItem, isStart?: boolean, isEnd?: boolean) => {
this.AloneSelectedLayout(item, isStart, isEnd)
},
onDateChange: (date1: CJDateItem, date2: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
console.log(TAG, “date2:”, JSON.stringify(date2))
},
})
@Builder
SelectedBackgroundLayout(item: CJDateItem, isStart?: boolean, isEnd?: boolean){
Column()
.width(“100%”)
.height(“100%”)
.backgroundColor(Color.Brown)
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
b、自定义封闭式范围选择两端圆角
CJCalendar({
optMode: OptMode.RANGE,
rangeStyle: SelectedStyle.CLOSE,// ALONE:独立风格, CLOSE:封闭风格
extremityRadius: 999,
selectedBackgroundLayout: (item: CJDateItem, isStart?: boolean, isEnd?: boolean) => {
this.AloneSelectedLayout(item, isStart, isEnd)
},
onDateChange: (date1: CJDateItem, date2: CJDateItem) => {
console.log(TAG, “date1:”, JSON.stringify(date1))
console.log(TAG, “date2:”, JSON.stringify(date2))
},
})
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
@Builder
SelectedBackgroundLayout(item: CJDateItem, isStart?: boolean, isEnd?: boolean){
Column()
.width(“100%”)
.height(“100%”)
.backgroundColor(Color.Brown)
}
<button style="position: absolute; padding: 4px 8px 0px; cursor: pointer; top: 8px; right: 8px; font-size: 14px;">复制</button>
这只是冰山一脚,
还有很多功能可自行探索 。。。。。。
使用后提示库不支持API 9
纯技术交流
找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17
组件的方法?看最新的文档吧,里面有个综合案例,还有疑问可以群里讨论
针对您提到的HarmonyOS鸿蒙一款基于ArkTs+ArkUI开发的常用日历组件,这里为您提供相关信息:
该日历组件名为cjcalendar,它是一款功能全面的日历开发组件,内部集成了常规、单选、时间范围选择、多选以及自定义日期每项显示等多种功能。开发者可以通过ArkTs和ArkUI框架,轻松地在HarmonyOS应用中使用该组件。
cjcalendar组件提供了丰富的自定义选项,如标题栏高度、星期标题、日期字体大小和颜色等,均可以根据需求进行个性化设置。此外,该组件还支持自定义布局,包括日期每一项布局、标题中心/左边/右边布局以及今日样式布局等。
在使用cjcalendar组件时,开发者需要注意组件的属性和方法,确保正确设置和使用。如遇到问题,建议查阅官方文档或相关开发教程以获取更多帮助。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html