news 2026/7/27 10:44:56

HarmonyOS应用《玄象》开发实战:LunarCalendarPage 农历主页:Calendar 组件 + 农历标注融合

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HarmonyOS应用《玄象》开发实战:LunarCalendarPage 农历主页:Calendar 组件 + 农历标注融合

阅读时长:约 19 分钟 | 难度:★★★★☆ | 篇章:第 8 篇 · 天文历法模块 对应源码:entry/src/main/ets/pages/astronomy/LunarCalendarPage.ets

前言

农历主页是玄象项目天文历法模块的核心功能页。页面通过CalendarDay自定义数据模型 +Grid网格布局,展示公历日期与农历日期的“双历融合“视图。本篇将深入剖析玄象项目农历主页的实现:从CalendarDay接口设计、generateCalendar日历生成算法、上月/当月/下月填充逻辑,到Grid网格布局与农历日名标注。掌握这套农历主页实现方法论,您就能为任何 HarmonyOS 应用构建双历融合的日历视图。

提示:玄象项目农历主页采用 7×6 网格布局,每格同时显示公历日与农历日名。

一、CalendarDay 接口

1.1 数据模型

interface CalendarDay { day: number; // 公历日 lunar: string; // 农历日 isCurrentMonth: boolean; // 是否本月 isToday: boolean; // 是否今天 }

二、日历生成算法

2.1 生成逻辑

private generateCalendar(): void { const days: CalendarDay[] = []; const firstDay = new Date(this.currentYear, this.currentMonth - 1, 1); const lastDay = new Date(this.currentYear, this.currentMonth, 0); const startWeek = firstDay.getDay(); const totalDays = lastDay.getDate(); // 上月填充 for (let i = startWeek - 1; i >= 0; i--) { days.push({ day: prevLastDay - i, lunar: '', isCurrentMonth: false, isToday: false }); } // 当月 for (let i = 1; i <= totalDays; i++) { const lunar = LunarCalendar.getLunarDate(this.currentYear, this.currentMonth, i); days.push({ day: i, lunar: LunarCalendar.getLunarDayName(lunar.lunarDay), isCurrentMonth: true, isToday: i === this.today && this.currentMonth === new Date().getMonth() + 1 }); } // 下月填充 const remaining = 42 - days.length; for (let i = 1; i <= remaining; i++) { days.push({ day: i, lunar: '', isCurrentMonth: false, isToday: false }); } this.calendarDays = days; }

三、农历主页设计总结

3.1 页面结构

区域组件内容
顶部标题Row年月 + 干支
星期标题Grid日一二三四五六
日历网格Grid7×6 日期网格
农历标注Text农历日名

总结

本篇以玄象项目农历主页为蓝本,深入剖析了 ArkUI 双历融合视图的实现:从CalendarDay接口设计、generateCalendar日历生成算法、上月/当月/下月填充逻辑,到Grid网格布局与农历日名标注。掌握这套农历主页实现方法论,您就能为任何 HarmonyOS 应用构建双历融合的日历视图。

如果这篇文章对你有帮助,欢迎点赞👍、收藏⭐、关注🔔,你的支持是我持续创作的动力!


相关资源:

  • 开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/27 10:44:42

Prompt 工程设计模式的年度演变:从简单模板到 Agent 驱动 Prompt

Prompt 工程设计模式的年度演变&#xff1a;从简单模板到 Agent 驱动 Prompt 一、深度引言与场景痛点 你还记得 2023 年的 Prompt 工程吗&#xff1f;那时候就是"给模型一段文字&#xff0c;让它回答"。你花大把时间调措辞、试顺序、加"请一步一步思考"。到…

作者头像 李华
网站建设 2026/7/27 10:42:24

身份证号码校验算法与实现详解

1. 项目概述身份证查验是日常生活中最常见的身份核验场景之一。从银行开户到酒店入住&#xff0c;从考试报名到政务办理&#xff0c;这张小小的卡片承载着每个公民最重要的身份信息。但你是否想过&#xff0c;当工作人员拿着你的身份证在机器上"滴"的一声时&#xff…

作者头像 李华
网站建设 2026/7/27 10:37:23

原神抽卡记录导出工具:5分钟掌握完整数据分析指南

原神抽卡记录导出工具&#xff1a;5分钟掌握完整数据分析指南 【免费下载链接】genshin-wish-export Easily export the Genshin Impact wish record. 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin-wish-export 还在为原神抽卡记录只能查看6个月而烦恼吗&…

作者头像 李华
网站建设 2026/7/27 10:36:45

出租车发票识别 API 最小可运行示例:从请求到解析

适用场景 出租车发票识别 API 核心价值是将机打发票上的结构化信息&#xff08;车号、金额、里程等&#xff09;转化为 JSON 数据&#xff0c;直接用于以下场景&#xff1a; 差旅费报销自动录入&#xff1a;员工拍照上传发票&#xff0c;系统自动提取金额、日期、车号&#x…

作者头像 李华