# Calendar **Repository Path**: zhaozixing/Calendar ## Basic Information - **Project Name**: Calendar - **Description**: Android 日历 - **Primary Language**: Android - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-12-15 - **Last Updated**: 2026-02-09 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Android日历应用 一个功能丰富的Android日历应用,提供直观的月历视图、个性化设置和动态图标功能。 ## 功能特性 ### 📅 核心功能 - **月历视图**:显示完整的月份日历,包含日期、星期和可选的周数 - **日期导航**:支持上一年/月、下一年/月的快速切换 - **日期选择**:点击任意日期查看详细信息 - **长按详情**:长按任意日期跳转到日历详情页面 - **今天标记**:当前日期以绿色背景高亮显示 - **周末标记**:周六、周日以红色字体显示 ### 📆 农历与节气功能 - **农历日期**:显示农历月、日 - **天干地支**:显示年份的天干地支 - **生肖**:显示年份对应的生肖 - **节气**:显示二十四节气 - **节日**:显示法定节假日和传统节日 ### 🔍 日历详情功能 - **详细信息**:显示公历、农历、星期、周数、天数、生肖、天干地支、五行等 - **宜忌事项**:显示当日宜做和忌做的事项 - **十二时辰**:显示十二时辰的吉凶、冲煞、喜神方位等 - **传统元素**:包含星宿、彭祖宜忌、建除宜忌等传统黄历元素 ### ⚙️ 设置功能 - **周日为周首日**:可选择将周日或周一作为每周的第一天 - **显示周数**:在日历左侧显示周数 - **显示农历**:控制是否显示农历日期 - **显示节气**:控制是否显示二十四节气 - **显示节日**:控制是否显示法定节假日和传统节日 ### 🎨 界面设计 - **响应式布局**:适配不同屏幕尺寸 - **清晰的视觉层次**:头部(10%)、日历内容(60%)、详情区域(30%) - **分割线**:周数区域与日期内容区域之间有明显的垂直分割线 - **颜色区分**:不同类型的日期(今天、周末、其他月)有不同的颜色标识 - **传统风格**:日历详情页面采用传统印刷日历风格,中央有超大字号日期 ### 🔄 动态功能 - **动态图标**:应用图标会根据当前日期自动更新为日期数字 ## 应用截图 ### 主页面-月历 ![主页面-月历](主页面-月历.png) ### 详情页-日历 ![详情页-日历](详情页-日历.png) ### 设置页 ![设置页](设置页.png) ## 项目结构 ``` Calendar/ ├── app/ │ ├── src/ │ │ ├── main/ # 主代码目录 │ │ │ ├── AndroidManifest.xml # 应用配置文件 │ │ │ ├── java/org/sauceggplant/calendar/ │ │ │ │ ├── activity/ # Activity类 │ │ │ │ │ ├── DateDetailActivity.java # 日历详情页面 │ │ │ │ │ ├── MainActivity.java # 主界面 │ │ │ │ │ └── SettingActivity.java # 设置界面 │ │ │ │ ├── config/ # 配置类 │ │ │ │ │ ├── CalendarConfig.java # 日历配置 │ │ │ │ │ └── GlobalConst.java # 全局常量 │ │ │ │ ├── util/ # 工具类 │ │ │ │ │ └── DateUtil.java # 日期工具类 │ │ │ │ └── vo/ # 值对象 │ │ │ │ └── DateDetail.java # 日期详情 │ │ │ ├── res/ # 资源文件 │ │ │ │ ├── drawable/ # 图标资源 │ │ │ │ │ ├── calendar_content_bg.xml │ │ │ │ │ ├── calendar_detail_bg.xml │ │ │ │ │ ├── calendar_month_bg.xml │ │ │ │ │ ├── card_bg.xml │ │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ │ ├── lucky_bg.xml │ │ │ │ │ └── unlucky_bg.xml │ │ │ │ ├── layout/ # 布局文件 │ │ │ │ │ ├── activity_date_detail.xml # 日历详情页面布局 │ │ │ │ │ ├── activity_main.xml # 主布局 │ │ │ │ │ ├── activity_setting.xml # 设置布局 │ │ │ │ │ ├── calendar_bottom.xml # 日历底部 │ │ │ │ │ ├── calendar_center.xml # 日历内容 │ │ │ │ │ └── calendar_head.xml # 日历头部 │ │ │ │ ├── mipmap-*/ # 不同密度的图标 │ │ │ │ ├── values/ # 字符串、颜色等 │ │ │ │ │ ├── colors.xml # 颜色定义 │ │ │ │ │ ├── strings.xml # 字符串定义 │ │ │ │ │ └── themes.xml # 主题定义 │ │ │ │ ├── values-night/ # 夜间模式资源 │ │ │ │ │ └── themes.xml # 夜间模式主题 │ │ │ │ └── xml/ # XML配置文件 │ ├── proguard-rules.pro # 混淆规则 ├── gradle/ # Gradle配置 │ ├── wrapper/ # Gradle包装器 │ └── libs.versions.toml # 版本管理 ├── keystore/ # 密钥库 ├── .gitignore # Git忽略文件 ├── README.md # 项目说明 ├── gradle.properties # Gradle属性 ├── gradlew # Gradle包装器脚本 ├── gradlew.bat # Gradle包装器脚本(Windows) ├── settings.gradle.kts # 项目设置 ├── 主页面-月历.png # 应用截图 ├── 设置页.png # 应用截图 └── 详情页-日历.png # 应用截图 ``` ## 技术栈 ### 开发语言 - Java ### Android组件 - Activity - Intent - SharedPreferences - ConstraintLayout - LinearLayout - GridLayout - ImageView - TextView - Switch ### 核心API - Calendar API - ShortcutManager API (动态图标) - Vector Drawable - Bitmap 生成 - LocalDate API (Java 8+) ### 第三方库 - **hutool-core**:处理农历日期、节气、节日 ### 构建工具 - Gradle 8.5 - Android Gradle Plugin 8.2.2 ## 安装使用 ### 环境要求 - Android Studio 2023.3+ - Android SDK 36 (Android 15) - Minimum SDK 28 (Android 9.0) - Java Development Kit (JDK) 17+ ### 安装步骤 1. 克隆项目:`git clone ` 2. 打开Android Studio,选择"Open an existing project" 3. 导航到项目目录并选择 4. 等待Gradle同步完成 5. 连接Android设备或启动模拟器 6. 点击"Run"按钮运行应用 ### 使用说明 1. **查看日历**:应用启动后显示当前月份的日历 2. **导航日期**:使用头部的箭头按钮切换年份和月份 3. **查看详情**:点击任意日期查看详细信息,包括公历、农历、天干地支、生肖、节气和节日 4. **进入详情页面**:长按任意日期跳转到日历详情页面,查看更详细的黄历信息 5. **进入设置**:点击右上角的设置图标进入设置界面 6. **调整设置**:根据需要切换各个开关选项 ## 布局详解 ### 主界面布局 (activity_main.xml) - 使用ConstraintLayout作为根布局 - 包含三个主要部分: - **calendar_head**:头部导航栏,占10%高度 - **calendar_center**:日历内容区,占60%高度 - **calendar_bottom**:详情显示区,占30%高度 ### 日历内容布局 (calendar_center.xml) - 左侧:周数显示区域(week_numbers) - 中间:垂直分割线(divider) - 右侧:日历内容区域(calendar_content) - 上部:星期标题行(week_days_header) - 下部:日期网格(calendar_grid),6行7列的GridLayout ### 日历详情页面布局 (activity_date_detail.xml) - 使用ConstraintLayout作为根布局 - 包含四个主要部分: - **顶部标题区域**:显示年份和星期 - **中央超大日期区域**:显示超大字号的公历日期和农历日期 - **核心信息区域**:显示天干地支、五行、冲煞、星宿等信息 - **宜忌事项区域**:分为宜和忌两部分显示 - **十二时辰区域**:显示十二时辰的吉凶、时间范围等 ### 设置界面布局 (activity_setting.xml) - 使用LinearLayout作为根布局,垂直排列 - 包含5个设置选项,每个选项包含文字说明和Switch开关 ## 核心类说明 ### MainActivity 应用的主界面,负责日历的显示、导航和交互。主要功能包括: - 初始化日历数据和视图组件 - 处理日期导航(上一年/月、下一年/月) - 管理日期选择和详情显示 - 实现长按跳转到日历详情页面 - 读取设置并应用到日历显示 ### DateDetailActivity 日历详情页面,显示详细的黄历信息。主要功能包括: - 接收并解析从MainActivity传递的日期参数 - 显示详细的日期信息,包括公历、农历、星期等 - 显示天干地支、五行、冲煞、星宿等传统元素 - 显示宜忌事项和十二时辰吉凶 ### SettingActivity 设置界面,允许用户个性化日历显示。主要功能包括: - 提供5个Switch开关控制不同的日历选项 - 使用SharedPreferences持久化存储设置 - 加载和保存用户的设置偏好 ### DateDetail 日期详情值对象,封装了日期的完整信息: - 公历日期(年、月、日) - 农历日期(月、日) - 天干地支 - 生肖 - 节气 - 节日 - 宜忌事项 - 十二时辰信息 DateDetail.detail() 样例数据如下: ``` ※公历: 2026年1月20日 ※农历: 二零二五年 腊月 初二 ※星期: 星期二 ※周数: 第4周(公历2026) ※天数: 第20天(公历2026) ※生肖: 乙巳 蛇年(农历2025) ※节气: 今日 大寒 ※干支: 乙巳年己丑月甲午日庚午时 ※五行: 覆灯火霹雳火沙中金路旁土 ※冲煞: 马日冲鼠煞北 ※星宿: 室; 名称: 室火猪; 四神: 玄武; 方位: 北方玄天 ※星宿歌诀: 室 室星修造进田牛, 儿孙代代近王侯 家贵荣华天上至, 寿如彭祖八千秋 开门放水招财帛, 和合婚姻生贵儿 埋葬若能依此日, 门庭兴旺福无休 ※胎神方位(今日): 占门碓 房内北 ※阳贵方位(今日): 坤 西南 ※阴贵方位(今日): 艮 东北 ※喜神方位(今日): 艮 东北 ※财神方位(今日): 艮 东北 ※福神方位(今日): 巽 东南 ※宜忌: 今日宜忌 宜: [嫁娶, 纳采, 订盟, 入宅, 移徙, 安床, 祭祀, 祈福, 开光, 出行, 解除, 出火, 拆卸, 动土, 纳畜, 谢土, 安葬, 破土] 忌: [伐木, 开市, 交易, 上梁, 作灶, 安门, 盖屋] ※彭祖宜忌: 甲不开仓 午不苫盖 天干: 甲日不宜开仓库存,否则财物易耗散 地支: 午日不宜覆盖房屋,屋主易更张(变动) ※建除宜忌: 执可捕捉,盗贼难藏 详情: 执日适合捕捉,盗贼难逃 ※吉凶: 十二时辰 甲子吉 乙丑吉 丙寅凶 丁卯吉 戊辰凶 己巳凶 庚午吉 辛未凶 壬申吉 癸酉吉 甲戌凶 乙亥凶 ``` ### DateUtil 日期工具类,提供日期相关的计算方法: - 计算两个日期之间的天数差 - 计算生肖索引 - 计算天干索引 - 计算地支索引 ### GlobalConst 全局常量类,定义了日历相关的常量: - 星期数组 - 天干数组 - 地支数组 - 生肖数组 ## 开发说明 ### 数据持久化 - 使用SharedPreferences存储设置信息 - 键名定义: - `sunday_first`:是否周日为周首日 - `show_week_numbers`:是否显示周数 - `show_lunar`:是否显示农历 - `show_solar_terms`:是否显示节气 - `show_festivals`:是否显示节日 ### 动态图标实现 - 使用ShortcutManager API在Android 8.0+设备上实现 - 结合Vector Drawable和Bitmap动态生成图标 - 应用启动时更新图标为当前日期 ### 农历与节气实现 - 使用hutool-core库的ChineseDate类处理农历日期 - 支持的功能: - 农历月、日的显示 - 年份的天干地支计算 - 生肖计算 - 节气查询 - 节日查询 ### 颜色定义 - `background`:全局背景色(白色) - `dividerBackground`:分割线颜色(浅灰色) - `weekNumbersFontColor`:周数文本颜色(蓝色) - `dateFontColor`:日期文本颜色(黑色) - `weekendFontColor`:周末文本颜色(红色) - `lastOrNextMonthFontColor`:其他月日期文本颜色(浅灰色) - `todayBackgroundColor`:今天背景色(绿色) - `selectedBackgroundColor`:选中日期背景色(米黄色) ## 编译命令 ```bash # 编译调试版本 ./gradlew compileDebugSources # 构建调试版本APK ./gradlew assembleDebug # 构建发布版本APK ./gradlew assembleRelease ``` ## 待开发功能 - [x] 农历日期显示 ✅ - [x] 二十四节气显示 ✅ - [x] 节日显示 ✅ - [x] 日历详情页面 ✅ - [ ] 日程管理功能 - [ ] 主题切换 - [ ] 多语言支持 - [ ] 周视图和日视图 - [ ] 日程提醒功能 ## 许可证 MIT License ## 更新日志 ### v1.0.0 (2025-12-14) - 初始版本发布 - 基础日历功能 - 设置界面 - 动态图标功能 ### v1.1.0 (2025-12-15) - 新增农历日期显示功能 - 新增天干地支和生肖显示 - 新增节气显示功能 - 新增节日显示功能 ### v1.2.0 (2026-01-20) - 新增日历详情页面 - 实现长按跳转功能 - 新增黄历信息显示 - 新增宜忌事项和十二时辰吉凶 - 优化界面布局,采用传统印刷日历风格 ## 作者 jacob --- **欢迎使用Android日历应用!** 🎉