【鸿蒙开发】常用ArkUI日历组件

本文详细介绍了cjcalendar日历组件的安装、各种属性配置、方法使用以及多种操作模式和选中样式的示例。包括直接使用、范围选择、多选、定制主题色和日期限制等功能。
摘要由CSDN通过智能技术生成

cjcalendar

若文档加载不出来 请点这里查看

简介

cjcalendar 是一款日常开发常用的日历组件,内部集成常规、单选、时间范围选择、多选、自定义日期每项显示等.

下载安装

ohpm install cjcalendar

使用方式

import { CJCalendar } from 'cjcalendar'
CJCalendar()

一、各项属性

参数名类型必填说明
optModeOptMode操作模式,常规、单选、一段时间、多选:默认:OptMode.NORMAL
startDateDate开始日期:默认:new Date(1970, 0, 1)
endDateDate截止日期:默认:当前时间+10年
titleHeightLength标题栏高度:默认:50vp
weeksstring[]星期标题,默认:[“日”,“一”,“二”,“三”,“四”,“五”,“六”,]
weekTitleFontSizenumber | string | Resource星期标题字体大小,默认:12
weekTitleFontColorResourceColor星期标题字体颜色,默认:“#9E9E9E”
weekTitleBackgroundColorResourceColor星期标题背景色颜色,默认未设置
weekTitleHeightLength星期标栏高度,默认:40
titleFontSizenumber | string | Resource标题字体大小,默认:18
titleFontColorResourceColor标题字体颜色,默认:“#252a34”
showFastTodayboolean是否显示快捷 今,默认:true
fastTodayFontSizenumber | string | Resource快捷返回今天,字体大小,默认:12
fastTodayFontColorResource快捷返回今天,字体颜色,默认:“#FFFFFF”
fastTodayBgResource快捷返回今天,背景颜色,默认与todayFontColor一致
itemFontSizenumber | string | Resource日期每一项字体大小,默认:18
itemFontColorResource日期每一项字体颜色,默认:“#252a34”
itemFontWeightResource日期每一项字体,默认:FontWeight.Normal
todayFontColorResourceColor“今”日字体颜色,默认:“#03A9F4”
disabledFontColorResourceColor不能使用的日期字体颜色,默认:“#9E9E9E”
selectFontColorResourceColor选中日期字体颜色,默认:“#FFFFFF”
selectItemBgColorResourceColor选中日期背景颜色, 默认与todayFontColor一致
optModeOptMode操作类型,默认:NORMAL
rangeStyleSelectedStyleSelectedStyle.ALONE 独立风格,SelectedStyle.CLOSE 封闭风格,默认:SelectedStyle.ALONE 独立圆形选中风格
extremityRadiusnumberoptMode == OptMode。RANGE且rangeStyle==SelectedStyle.CLOSE 时生效,两头选项的圆角
showTimeboolean是否显示时间选择,默认:false
timeFontSizenumber | string | Resource时间选择器字体大小,默认:18
timeFontColorResourceColor时间选择器字体颜色,默认:item 字体颜色

二、常用方法

方法参数返回必填说明
cellLayoutitem: CJDateItem-自定义每一项布局
cusCellMainLayoutitem: CJDateItem,params: CellFontStyle-仅自定义日期文字区
selectedBackgroundLayoutitem: CJDateItem-仅自定义选中背景样式区
titleCenterLayout--自定义日期标题中心内容
titleLeftLayout--自定义日期标题左边内容
titleRightLayout--自定义日期标题右边内容
todayLayoutitem: CJDateItem-仅自定义 今日 样式,当使用cellLayout时,tadayLayout无效
fastTodayLayout--快捷回到今天自定义布局
disableCellClickitem: CJDateItem-点击不可用item时的事件响应
reBuildDateItemitem: CJDateItemCJDateItem计算item时,如需添加更多自定义属性时使用
onDateChangedate1: CJDateItem | Array, date2?: CJDateItem-选择变化监听,OptMode.NORMAL/OptMode.SINGLE,只返:date1;OptMode.RANGE:两个都返,date1为开始时间,date2为结束时间;MULTIPLE:返回Array,已选中的日期
onTimeChangetime1: CJTimeItem, time2?: CJTimeItem-时间选择改变监听
onMonthChangeafter: Date, befor: Date-月份改变回调:after 改变后,befor:改变前
cusTopLayoutpreMonth?: () => void, nextMonth?: () => void, backToday?: () => void-自定义顶部布局,可结合cusTopStateListener使用
cusTopStateListenertitle?: string, hasPre?: boolean, hasNext?: boolean, showFastToday?: boolean-自定义顶部布局时,可直接使用该状态回调用于控制顶部状态

三、CJDateItem通用属性

属性类型描述
fullYearnumber
monthnumber
datenumber日期
weeknumber星期
timenumber时间戳

四、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%")
    
    Text("广告位啥的你来加")
      .width("100%")
      .height(100)
      .fontSize(20)
      .backgroundColor("#ffcfdf")
      .fontColor("#112d4e")
      .textAlign(TextAlign.Center)
    }
    .width("100%")
}

在这里插入图片描述

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)
}

在这里插入图片描述

在这里插入图片描述

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))
    },
})
@Builder
SelectedBackgroundLayout(item: CJDateItem, isStart?: boolean, isEnd?: boolean){
    Column()
      .width("100%")
      .height("100%")
      .backgroundColor(Color.Brown)
}

在这里插入图片描述

移驾学习交流群

在这里插入图片描述

这只是冰山一脚,

还有很多功能可自行探索
。。。。。。

  • 9
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值