鸿蒙开发:巧用三方中心仓Calendar组件,轻松打造炫酷日历效果
注:适用版本(HarmonyOS NEXT/5.0/API12+)
一、引言
家人们,鸿蒙系统这发展速度简直绝了!越来越多开发者都一头扎进鸿蒙应用开发里。鸿蒙系统牛就牛在它有分布式、全场景这些特性,给咱开发者的创新空间那叫一个大。开发的时候,想提高效率、丰富应用功能,用三方组件是常有的事儿。
三方组件就跟开发路上的 “好帮手” 似的,好多开发者精心打磨、优化过,能帮咱们轻松实现一些复杂功能,不用吭哧吭哧从头写一大堆代码。比如说做界面设计,有些三方组件提供的 UI 样式超好看,交互效果也很棒,能让应用界面又好看又好用;功能实现这块儿,像地图、支付这些功能组件,能大幅缩短开发周期,让应用更快上线,简直香麻了。
咱聊聊鸿蒙开发哈,讲讲怎么巧妙用三方中心仓的 calendar 日历组件做出日历效果。这 calendar 日历组件可厉害啦,功能强大还很灵活,有好多超实用的特性,不管啥场景下的日历功能需求,它基本都能满足。学一学、用一用这个组件,开发者就能给自己的鸿蒙应用加上超丰富又实用的日历功能,用户体验直接拉满,应用竞争力也跟着 up up!
二、准备工作
2.1 开发环境搭建
工欲善其事,必先利其器。鸿蒙开发的主要工具是 DevEco Studio,它是一款功能强大的集成开发环境,专门为鸿蒙应用开发而设计,提供了丰富的功能和便捷的操作界面,能大大提高开发效率。
下载:前往HarmonyOS 官方开发者网站,根据自己的操作系统选择对应的版本进行下载。
安装:下载完成后,解压下载的安装包,双击运行安装程序。在安装过程中,按照向导的提示进行操作,选择安装路径、安装组件等。例如,在 Windows 系统下,安装向导会提示选择安装目录,默认安装在 “C:\Program Files” 下,也可以点击 “Browse…” 指定其他安装路径。安装过程中还会提示是否创建桌面快捷方式等选项,可根据个人需求进行选择。
配置:安装完成后,首次启动 DevEco Studio,会进入配置向导。需要同意相关条款,然后进行基础配置,包括设置 Node.js 与 Ohpm 的安装路径。如果本地已经安装了合适版本的 Node.js 和 Ohpm,可以选择 “Local” 并指定路径;如果没有安装或者版本不合适,可以选择从华为镜像下载至合适的路径 。接着进行 SDK 配置,设置 SDK 的下载路径,默认路径可能在系统盘,建议修改到其他空间充足的磁盘分区,以避免系统盘空间不足的问题。在配置过程中,要注意路径不能包含中文字符和空格,否则可能会导致后续开发过程中出现问题。
环境诊断:配置完成后,可以使用 DevEco Studio 提供的开发环境诊断功能来检查环境是否搭建成功。在欢迎界面点击【Help】>【Diagnose Development Environment】,或者在已经打开工程开发界面的情况下,在菜单栏点击【Help】>【Diagnostic Tools】>【Diagnose Development Environment】 进行诊断。如果检查结果中所有配置都显示 “√”,则说明环境已经搭建好了,可以开始进行鸿蒙应用的开发;如果检测结果为未通过,需要根据检查项的描述和修复建议进行处理 。
2.2 引入三方中心仓 calendar 组件
在鸿蒙开发中,使用三方中心仓的 calendar 组件可以快速实现丰富的日历功能。引入该组件的主要方式是通过命令行工具进行安装。
打开命令行终端:在 DevEco Studio 的底部工具栏中,找到并点击 “Terminal” 图标,打开命令行终端。如果是在 Windows 系统下,也可以使用系统自带的命令提示符(CMD)或者 PowerShell。
切换到项目目录:在命令行终端中,使用 cd
命令切换到当前鸿蒙项目的根目录。例如,如果项目存放在 “D:\myHarmonyProject” 目录下,可以在命令行中输入 cd D:\myHarmonyProject
,然后回车确认。
安装 calendar 组件:在项目目录下,执行安装命令 ohpm install @ohmos/calendar
。该命令会从三方中心仓下载并安装 calendar 组件及其依赖项。
可能遇到的问题及解决办法:
版本兼容问题:如果在安装过程中遇到版本不兼容的错误提示,需要检查当前项目所使用的鸿蒙 SDK 版本以及 calendar 组件的版本,确保它们之间相互兼容。可以查看 calendar 组件的官方文档,了解其支持的鸿蒙 SDK 版本范围。如果版本不匹配,可以尝试更新或降级组件版本,或者调整项目的 SDK 版本。例如,若提示组件版本过高不兼容当前 SDK,可以尝试安装指定的较低版本,如 ohpm install @ohmos/calendar@1.0.0
(假设 1.0.0 版本是兼容的)。
命令识别问题:如果系统提示 “ohpm” 不是内部或外部命令,可能是因为 Ohpm 的安装路径没有正确添加到系统环境变量中。此时,需要手动将 Ohpm 的安装路径添加到系统环境变量的 Path 中。具体步骤如下:在 Windows 系统中,右键点击 “此电脑”,选择 “属性”,在弹出的窗口中点击 “高级系统设置”,然后在 “系统属性” 窗口中点击 “环境变量”。在 “系统变量” 中找到 “Path” 变量,点击 “编辑”,将 Ohpm 的安装路径添加到变量值中,多个路径之间用分号隔开。添加完成后,重新打开命令行终端,再次执行安装命令。
三、calendar 日历组件概述
3.1 组件功能特性
calendar 日历组件是一款功能丰富且实用的组件,为开发者在鸿蒙应用中实现日历功能提供了极大的便利。它主要支持以下三种模式,以满足不同场景下的使用需求。
常规日历:这种模式下,组件能够完整展示全月日期,用户可以直观地看到一个月内的所有日期信息 。同时,支持切换月份操作,通过点击切换按钮或者滑动操作,用户可以方便地查看上一个月或下一个月的日期。当用户点击某一日期时,会有明确的点击反馈,例如日期背景颜色改变、文字颜色变化等,让用户清晰知晓当前点击的日期 。此外,还可以对特定日期进行标注显示,比如标注节假日、重要纪念日等,方便用户快速识别特殊日期。开发者可以通过 controller 对日历进行控制,例如跳转到指定日期、设置初始显示月份等 。在选中样式方面,提供了多种自定义选项,包括选中日期的背景颜色、文字颜色、边框样式等,以适配不同应用的 UI 风格。并且,该组件支持国际化,能够根据不同的语言环境显示相应语言的星期和月份名称,满足全球用户的使用需求 。在深色模式下,组件也能自适应显示,确保在深色背景下日期和文字依然清晰可读,提升用户在不同显示模式下的使用体验。
超级迷你日历:超级迷你日历模式以简洁的方式展示全月日期,适合在空间有限的界面中使用。它重点突出当前时间,让用户能够快速了解当前所处的日期 。虽然展示的信息相对简洁,但依然保留了日历的核心功能,用户可以通过简单的交互查看不同日期。
单周日历:单周日历模式专注于展示当周日期,让用户聚焦于当前周的时间安排 。同样,它也突出显示当前时间,方便用户随时查看。这种模式在一些需要关注本周日程安排的场景中非常实用,例如工作计划安排、本周活动提醒等。
3.2 API 详解
calendar 日历组件提供了丰富的 API,通过这些 API,开发者可以灵活地配置和控制日历的各种行为和样式。以下是一些重要属性和回调函数的详细介绍。
属性:
selectedDays:类型为 HmCalendarSelectedDay[]
,用于设置选中的日期。它是一个数组,数组中的每个元素都是一个 HmCalendarSelectedDay
对象,该对象包含 date
(日期,格式为 YYYY-MM-DD
)以及其他可选属性,如 text
(选中时显示的文字)、textColor
(文字颜色)、backgroundColor
(背景颜色)、borderRadius
(背景圆角)。例如:
selectedDays: [
{ date: '2024-01-01', text: '元旦', textColor: '#FFFFFF', backgroundColor: '#FF0000', borderRadius: 4 },
{ date: '2024-01-10' }
]
currentDate:类型为 string
,用于设置当前的日期,默认值为 dayjs().format(this.format)
,即当前日期,格式由 format
属性决定。通过修改这个属性,可以将日历的初始显示日期设置为指定日期。例如:
currentDate: '2024-05-20'
type:类型为 HmCalendarType
,用于设置日历类型,可选值有 HmCalendarType.MONTH
(常规日历)、HmCalendarType.WEEK
(单周日历)、HmCalendarType.MONTH_DOT
(超级迷你日历)。通过设置这个属性,可以轻松切换日历的显示模式。例如:
type: HmCalendarType.WEEK
showToolBar:类型为 boolean
,用于控制是否显示工具栏,默认值为 true
。工具栏通常包含切换月份、返回当前月等功能按钮,根据实际需求可以选择显示或隐藏。例如:
showToolBar: false
color:类型为 ResourceColor
,用于设置选中颜色,默认值为 #ffaa00
。这个颜色会应用到选中日期的背景或其他选中相关的元素上,以突出显示选中状态。例如:
color: '#00FF00'
gutter:类型为 number
,用于设置迷你日历槽距,默认值为 4
。在超级迷你日历模式下,该属性控制日期之间的间距,影响日历的整体布局。例如:
gutter: 8
format:类型为 string
,用于设置日期格式,默认值为 YYYY-MM-DD
。可以根据需求修改日期格式,例如改为 YYYY年MM月DD日
等。例如:
format: 'YYYY年MM月DD日'
weeks:类型为 ResourceStr[]
,用于设置周标题文字,默认值为 ['日','一','二','三','四','五','六']
。可以根据不同语言环境或需求修改周标题文字。例如:
weeks: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
radius:类型为 Length | BorderRadiuses
,用于设置选中背景圆角,默认值为 14
。可以通过修改这个属性来调整选中日期背景的圆角大小,使日历的外观更加美观。例如:
radius: 8
rowsAuto:类型为 boolean
,用于控制行数是否自动,默认值为 false
。当设置为 true
时,日历的行数会根据日期数量自动调整,以适应不同月份的天数。例如:
rowsAuto: true
controller:类型为 HmCalendarController
,用于对日历进行控制。HmCalendarController
包含多个方法,如 prevMonth
(切换到上一个月)、nextMonth
(切换到下一个月)、currentMonth
(切换到当前月)、toggleMonth
(切换到指定月份)。通过获取 controller
对象,可以在代码中方便地对日历进行各种操作。例如:
@Entry
@Component
struct Index {
private calendarController: HmCalendarController = new HmCalendarController();
build() {
Column({ space: 16 }) {
Text('常规日历')
HmCalendar({
controller: this.calendarController
})
Button('上一个月').onClick(() => {
this.calendarController.prevMonth();
})
Button('下一个月').onClick(() => {
this.calendarController.nextMonth();
})
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
回调函数:
onClickDate:类型为 (date: string) => void
,当点击日期时会触发该回调函数,参数 date
为点击的日期,格式为 YYYY-MM-DD
。可以在回调函数中处理点击日期后的逻辑,例如显示该日期对应的详细信息、跳转到其他页面等。例如:
onClickDate: (date) => {
console.log('点击的日期是:', date);
// 这里可以添加更多处理逻辑,比如根据点击日期加载相关数据
}
onChangeMonth:类型为 (month: string) => void
,当切换月份时会触发该回调函数,参数 month
为切换后的月份,格式为 YYYY-MM
。可以在回调函数中根据切换后的月份更新界面显示或加载相关数据。例如:
onChangeMonth: (month) => {
console.log('切换到的月份是:', month);
// 可以根据月份加载该月的特殊事件数据并显示
}
四、实现常规日历效果
4.1 基础代码实现
在鸿蒙开发中,使用三方中心仓的 calendar 日历组件实现常规日历效果,首先需要引入该组件并编写基础代码。以下是一个简单的示例,展示如何使用 HmCalendar
组件创建一个常规日历,并设置基本属性,如颜色、选中日期等。
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
build() {
Column({ space: 16 }) {
Text('常规日历')
HmCalendar({
color: '#00aa00',// 设置选中颜色为绿色
selectedDays: [
{ date: '2024-01-01' },
{ date: '2024-01-10' },
{ date: '2024-01-20' }
]
})
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,通过 import { HmCalendar } from '@ohmos/calendar';
引入了 HmCalendar
组件 。然后在 Index
组件的 build
方法中,创建了一个 Column
布局容器,在其中添加了一个 Text
组件用于显示标题 “常规日历”,以及一个 HmCalendar
组件来展示日历 。通过 color
属性设置了选中日期的颜色为绿色(#00aa00
),selectedDays
属性设置了初始选中的日期数组,包含 2024-01-01
、2024-01-10
和 2024-01-20
这三个日期 。这样,一个基本的常规日历就创建完成了,运行代码后,界面上会显示出带有指定选中日期的日历。
4.2 样式定制
为了使日历更好地融入应用整体风格,我们可以通过 borderRadius
、border
、shadow
等方法对日历样式进行定制。这些方法可以分别设置日历的边框圆角、边框样式和阴影效果。
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
build() {
Column({ space: 16 }) {
Text('常规日历')
HmCalendar({
color: '#00aa00',
selectedDays: [
{ date: '2024-01-01' },
{ date: '2024-01-10' },
{ date: '2024-01-20' }
]
})
.borderRadius(8) // 设置边框圆角为8
.border({ width: 0.5, color: '#ededed' }) // 设置边框宽度为0.5,颜色为#ededed
.shadow({ color: '#ededed', radius: 16 }) // 设置阴影颜色为#ededed,半径为16
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在这段代码中,borderRadius(8)
将日历的边框圆角设置为 8,使日历的边角更加圆润,看起来更加美观 。border({ width: 0.5, color: '#ededed' })
设置了日历的边框,宽度为 0.5,颜色为 #ededed
,这样可以为日历添加一个淡淡的边框,增强其层次感 。shadow({ color: '#ededed', radius: 16 })
为日历添加了阴影效果,阴影颜色为 #ededed
,半径为 16,使日历看起来像是悬浮在页面上,增加了立体感和视觉吸引力 。通过这些样式定制,日历的外观得到了显著的提升,能够更好地与应用的整体界面风格相匹配。
五、实现超级迷你日历和单周日历效果
5.1 超级迷你日历
超级迷你日历以简洁的方式展示全月日期,适合在空间有限的界面中使用。它重点突出当前时间,让用户能够快速了解当前所处的日期。虽然展示的信息相对简洁,但依然保留了日历的核心功能,用户可以通过简单的交互查看不同日期。
实现超级迷你日历效果,关键在于将 type
属性设置为 HmCalendarType.MONTH_DOT
,同时可以根据需求配置其他特有属性,如 gutter
(槽距)等。以下是实现超级迷你日历的代码示例:
import { HmCalendar, HmCalendarType } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
build() {
Column({ space: 16 }) {
Text('超级迷你日历')
HmCalendar({
type: HmCalendarType.MONTH_DOT, // 设置为超级迷你日历类型
gutter: 6, // 设置槽距为6
color: '#00aa00', // 设置选中颜色为绿色
selectedDays: [
{ date: dayjs().format('YYYY-MM-DD') } // 默认选中当前日期
]
})
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,通过 type: HmCalendarType.MONTH_DOT
将日历类型设置为超级迷你日历 。gutter: 6
设置了日期之间的槽距为 6,使日历布局更加紧凑 。color: '#00aa00'
设置了选中日期的颜色为绿色,突出显示选中状态 。selectedDays
属性设置了默认选中的日期为当前日期,通过 dayjs().format('YYYY-MM-DD')
获取当前日期并添加到 selectedDays
数组中 。这样,一个简洁的超级迷你日历就实现了,在界面上以紧凑的方式展示全月日期,并突出显示当前日期。
5.2 单周日历
单周日历专注于展示当周日期,让用户聚焦于当前周的时间安排,同样突出显示当前时间,方便用户随时查看。这种模式在一些需要关注本周日程安排的场景中非常实用,例如工作计划安排、本周活动提醒等。
实现单周日历效果,需要将 type
属性设置为 HmCalendarType.WEEK
,并根据具体需求配置相关属性。以下是实现单周日历的代码示例:
import { HmCalendar, HmCalendarType } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
build() {
Column({ space: 16 }) {
Text('单周日历')
HmCalendar({
type: HmCalendarType.WEEK, // 设置为单周日历类型
color: '#00aa00', // 设置选中颜色为绿色
selectedDays: [
{ date: dayjs().format('YYYY-MM-DD'), text: ' ' } // 默认选中当前日期,设置选中文字为空
]
})
.borderRadius(8) // 设置边框圆角为8
.border({ width: 0.5, color: '#ededed' }) // 设置边框宽度为0.5,颜色为#ededed
.shadow({ color: '#ededed', radius: 16 }) // 设置阴影颜色为#ededed,半径为16
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在这段代码中,type: HmCalendarType.WEEK
将日历类型设置为单周日历 。color: '#00aa00'
设置了选中日期的颜色为绿色 。selectedDays
属性设置了默认选中当前日期,并通过 text: ' '
将选中文字设置为空 。同时,使用 borderRadius
、border
和 shadow
方法对日历进行样式定制,设置了边框圆角、边框样式和阴影效果,使日历更加美观和具有立体感 。运行这段代码,界面上会展示出一个单周日历,突出显示当前周的日期,并默认选中当前日期。
六、实际应用案例拓展
6.1 结合业务场景的应用
在实际开发中,calendar 日历组件可以广泛应用于各种业务场景,为用户提供更加便捷和实用的功能。下面以日历打卡和日程管理为例,详细介绍如何将日历组件融入到具体业务场景中。
日历打卡功能实现:
日历打卡是一种常见的业务需求,用户可以在日历上标记自己完成某项任务或活动的日期。在鸿蒙开发中,利用 calendar 日历组件实现日历打卡功能并不复杂。
首先,通过 selectedDays
属性来设置已打卡的日期。在点击日期时,利用 onClickDate
回调函数来处理打卡逻辑。当用户点击某个日期时,判断该日期是否已经在 selectedDays
数组中,如果不在,则将其添加到数组中,表示用户在该日期进行了打卡;如果已经存在,则可以根据需求进行取消打卡等操作。
以下是一个简单的代码示例,展示如何实现日历打卡功能:
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
// 存储已打卡的日期数组
private checkedDays: { date: string }[] = [];
build() {
Column({ space: 16 }) {
Text('日历打卡')
HmCalendar({
color: '#00aa00',
selectedDays: this.checkedDays,
onClickDate: (date) => {
const isChecked = this.checkedDays.some((item) => item.date === date);
if (isChecked) {
// 如果已经打卡,取消打卡
this.checkedDays = this.checkedDays.filter((item) => item.date!== date);
} else {
// 如果未打卡,添加打卡记录
this.checkedDays.push({ date });
}
}
})
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,定义了一个 checkedDays
数组来存储已打卡的日期 。在 HmCalendar
组件中,将 selectedDays
属性设置为 checkedDays
,以显示已打卡的日期 。通过 onClickDate
回调函数,在用户点击日期时,判断该日期是否已经在 checkedDays
数组中,从而实现打卡和取消打卡的功能 。这样,用户就可以在日历上方便地进行打卡操作,并且打卡状态会实时显示在日历上。
日程管理功能实现:
日程管理是日历组件的另一个重要应用场景。在日程管理中,用户可以查看不同日期对应的日程安排,添加、编辑或删除日程。
为了实现日程管理功能,可以结合 onClickDate
回调函数和其他业务逻辑。当用户点击日期时,弹出一个弹窗或跳转到一个新页面,在该页面中展示该日期的详细日程信息,并提供添加、编辑和删除日程的操作按钮。
以下是一个简化的代码示例,展示如何实现日程管理的基本功能:
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
// 模拟日程数据结构
interface Schedule {
title: string;
startTime: string;
endTime: string;
}
@Entry
@Component
struct Index {
// 存储日程数据,以日期为键,日程数组为值
private schedules: { [date: string]: Schedule[] } = {};
build() {
Column({ space: 16 }) {
Text('日程管理')
HmCalendar({
color: '#00aa00',
onClickDate: (date) => {
// 这里可以根据date从schedules中获取该日期的日程数据
// 并进行展示或跳转到详细日程页面
const scheduleList = this.schedules[date] || [];
console.log(`日期 ${date} 的日程安排:`, scheduleList);
// 实际应用中可以使用弹窗或页面跳转来展示日程详情
}
})
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,定义了一个 schedules
对象来存储日程数据,键为日期,值为该日期对应的日程数组 。在 HmCalendar
组件的 onClickDate
回调函数中,根据点击的日期从 schedules
对象中获取对应的日程数据,并进行日志输出 。在实际应用中,可以根据这些日程数据,通过弹窗或页面跳转的方式展示详细的日程信息,同时提供添加、编辑和删除日程的功能,从而实现完整的日程管理功能。
6.2 与其他组件的交互
日历组件在实际应用中通常需要与页面其他组件进行交互,以实现更丰富的功能。下面以文本框和按钮为例,讲解日历组件与它们的交互方式。
与文本框交互:
日历组件与文本框的交互可以实现日期选择和显示的功能。当用户点击文本框时,可以弹出日历组件,用户在日历上选择日期后,将选中的日期显示在文本框中。
以下是一个代码示例,展示日历组件与文本框的交互:
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
private selectedDate: string = dayjs().format('YYYY-MM-DD'); // 存储选中的日期
private isCalendarVisible: boolean = false; // 控制日历组件的显示隐藏
build() {
Column({ space: 16 }) {
Text('选择日期')
TextField(this.selectedDate)
.onClick(() => {
this.isCalendarVisible = true; // 点击文本框显示日历组件
})
if (this.isCalendarVisible) {
HmCalendar({
color: '#00aa00',
currentDate: this.selectedDate,
onClickDate: (date) => {
this.selectedDate = date; // 更新选中的日期
this.isCalendarVisible = false; // 选择日期后隐藏日历组件
}
})
.position({ x: 0, y: 100 }) // 设置日历组件的位置
.width('100%')
}
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,定义了一个 selectedDate
变量来存储选中的日期,初始值为当前日期 。还定义了一个 isCalendarVisible
变量来控制日历组件的显示和隐藏,初始值为 false
。在 TextField
组件的 onClick
回调函数中,将 isCalendarVisible
设置为 true
,从而显示日历组件 。在 HmCalendar
组件中,通过 currentDate
属性设置日历的当前日期为 selectedDate
,并且在 onClickDate
回调函数中,更新 selectedDate
的值,并将 isCalendarVisible
设置为 false
,隐藏日历组件 。这样,用户就可以通过点击文本框弹出日历组件,选择日期后将其显示在文本框中。
与按钮交互:
日历组件与按钮的交互可以实现一些特定的操作,比如切换月份、跳转到指定日期等。以切换月份为例,通过按钮的点击事件,调用日历组件的 controller
中的 prevMonth
或 nextMonth
方法来实现月份的切换。
以下是一个代码示例,展示日历组件与按钮的交互:
import { HmCalendar } from '@ohmos/calendar';
import dayjs from 'dayjs';
@Entry
@Component
struct Index {
private calendarController: HmCalendarController = new HmCalendarController();
build() {
Column({ space: 16 }) {
Text('日历操作')
HmCalendar({
color: '#00aa00',
controller: this.calendarController
})
Row() {
Button('上一个月')
.onClick(() => {
this.calendarController.prevMonth(); // 点击按钮切换到上一个月
})
Button('下一个月')
.onClick(() => {
this.calendarController.nextMonth(); // 点击按钮切换到下一个月
})
}
}
.padding(16)
.width('100%')
.height('100%')
.alignItems(HorizontalAlign.Start)
}
}
在上述代码中,创建了一个 HmCalendarController
对象 calendarController
,并将其传递给 HmCalendar
组件的 controller
属性 。在两个 Button
组件的 onClick
回调函数中,分别调用 calendarController
的 prevMonth
和 nextMonth
方法,实现了点击按钮切换月份的功能 。通过这种方式,日历组件与按钮进行交互,为用户提供了方便的日历操作功能。
七、总结与展望
咱深入研究了三方中心仓的 calendar 日历组件,成功搞出了常规日历、超级迷你日历还有单周日历的效果,并且已经应用到实际业务里啦。回想起整个开发过程,引入这个 calendar 组件可太香了,帮我们省了老多时间和精力,不用再自己从头去写那些复杂的日历逻辑和界面代码,简单配置一下,调用调用 API,就能快速搭出功能超丰富的日历模块,简直美滋滋!
在实现过程中,我们详细了解了组件的各种属性和回调函数,通过灵活设置 selectedDays
、type
、color
等属性,定制出符合需求的日历样式和交互效果。例如,在常规日历中设置选中日期的颜色和样式,在超级迷你日历中调整槽距以适应不同的布局需求。同时,利用 onClickDate
和 onChangeMonth
等回调函数,实现了与用户的交互逻辑,如处理日期点击事件、切换月份时的操作等。
在实际应用拓展这块儿,我们把日历组件和业务场景紧紧绑在一起,搞出了日历打卡和日程管理的功能。再让它跟文本框、按钮这些其他组件互动互动,用户体验就更上一层楼啦,日历用起来也更方便、更好使了。