LVGL- Calendar 日歷控件

1 日歷控件

1.1 日歷背景

lv_calendar 是 LVGL(Light and Versatile Graphics Library)提供的標準 GUI 控件之一,用于顯示日歷視圖。它支持用戶查看某年某月的完整日歷,還可以實現點擊日期、標記日期、導航月份等操作。這個控件通常用于需要日期交互的場景,比如設置日期、查看計劃、日程簽到等。

1.2 主要功能特點

1.2.1 顯示標準公歷月份

  1. 支持自動計算每月天數(含閏年判斷)

  2. 支持周起始日自定義(默認周一)

1.2.2 日期選擇功能

  1. 支持用戶點擊單個日期進行選擇

  2. 支持回調事件獲取所選日期

1.2.3 高亮多個日期

  1. 可用于標記節假日、簽到、提醒等

  2. 設置高亮顏色以區分普通日期

1.2.4 當前日期標識

  1. 提供 today_date 屬性,用于高亮當天

  2. 可靈活設定實際系統日期

1.2.5 支持月份切換

  1. 可通過箭頭或下拉方式更換月份

  2. 提供 calendar_header_arrow 和 calendar_header_dropdown 兩種頭部風格

1.2.6 樣式高度可定制

  1. 通過 LV_PART_* 接口設置顏色、背景、字體

  2. 與 LVGL 樣式系統無縫集成,適配不同 UI 風格

2 常見函數

2.1 創建一個新的日歷控件

lv_calendar_create(lv_obj_t * parent)

作用:在指定父對象上創建一個新的日歷控件對象。

參數:
parent:父對象(如 lv_scr_act() 表示當前屏幕)
返回值:返回日歷對象 lv_obj_t *

lv_obj_t * calendar = lv_calendar_create(lv_scr_act());

在這里插入圖片描述

2.2 設置“今天”的日期,用于高亮當前日期。

lv_calendar_set_today_date(lv_obj_t * calendar, uint16_t year, uint8_t month, uint8_t day)

作用:設置“今天”的日期,用于高亮當前日期。

使用場景:用于展示當前系統日期或突出顯示今天。

示例:

lv_calendar_set_today_date(calendar, 2025, 5, 17);

2.2 設定月份和年份

 lv_calendar_set_showed_date(lv_obj_t * calendar, uint16_t year, uint8_t month)

作用:設置日歷當前顯示的月份和年份。

使用場景:初始化時顯示特定月份,或切換月份。

示例:

lv_calendar_set_showed_date(calendar, 2025, 5);

在這里插入圖片描述

2.3 “高亮日期”

lv_calendar_set_highlighted_dates(lv_obj_t * calendar, const lv_calendar_date_t * dates, uint16_t date_num)

作用:設置一組“高亮日期”,通常用于標記簽到、提醒、節假日等。

參數:

dates:日期數組

date_num:日期數量

static lv_calendar_date_t marked_days[2] = {{2025, 5, 10},{2025, 5, 20}
};
lv_calendar_set_highlighted_dates(calendar, marked_days, 2);

在這里插入圖片描述

2.4 獲取當前選中的日期

lv_res_t lv_calendar_get_pressed_date(const lv_obj_t * obj, lv_calendar_date_t * date);typedef struct {uint16_t year;uint8_t month;uint8_t day;
} lv_calendar_date_t;

作用:當用戶點擊某個日期時,獲取當前選中的日期。

返回值:返回一個指向 lv_calendar_date_t 的指針(包含年/月/日),如果沒有選中則返回 NULL。

配合事件使用:

void calendar_event_cb(lv_event_t* e) {lv_obj_t* calendar = lv_event_get_current_target(e);lv_calendar_date_t date;lv_res_t reult=lv_calendar_get_pressed_date(calendar,&date);if (reult ==LV_RES_OK) {lv_log("選擇日期:%d-%d-%d\n", date.year, date.month, date.day);}
}lv_obj_add_event_cb(calendar, calendar_event_cb, LV_EVENT_VALUE_CHANGED, NULL);

在這里插入圖片描述

2.5 添加“左右箭頭”頭部

lv_calendar_header_arrow_create(lv_obj_t * calendar)
作用:為日歷控件添加“左右箭頭”頭部,用于月份切換。

返回值:返回頭部對象

示例:

lv_obj_t * header = lv_calendar_header_arrow_create(calendar);

在這里插入圖片描述

2.7 下拉框樣式”的年月選擇頭部

lv_calendar_header_dropdown_create(lv_obj_t * calendar)

作用:為日歷添加“下拉框樣式”的年月選擇頭部。

示例:

    lv_calendar_header_dropdown_create(calendar);lv_obj_set_size(calendar, 200, 300);lv_obj_center(calendar);

在這里插入圖片描述

3 綜合代碼

lv_obj_set_style_…() 系列函數 來為 lv_calendar 添加自定義顏色和風格(style)。以下是一個 增強版的日歷應用界面,它不僅有“日期確認”功能,還對日歷控件進行了美化:背景色、邊框、選中顏色、今日高亮等都可以設置。

// 保存選中的日期
static lv_calendar_date_t selected_date;
static bool has_selected_date = false;// 事件:點擊日歷某個日期
static void calendar_event_cb(lv_event_t* e)
{lv_obj_t* calendar = lv_event_get_current_target(e);// 獲取點擊的日期if (lv_calendar_get_pressed_date(calendar, &selected_date) == LV_RES_OK) {has_selected_date = true;printf("你點擊了日期: %04d-%02d-%02d\n", selected_date.year, selected_date.month, selected_date.day);}
}// 事件:點擊“確認按鈕”
static void confirm_btn_event_cb(lv_event_t* e)
{if (has_selected_date) {printf("你設置的日期是: %04d-%02d-%02d\n",selected_date.year, selected_date.month, selected_date.day);// 這里可以調用你自己的保存函數// save_date_to_config(selected_date);// 也可以彈出提示框或跳轉頁面}else {printf("請先選擇日期\n");}
}void create_calendar_setting_page(void)
{// 創建日歷lv_obj_t* calendar = lv_calendar_create(lv_scr_act());// 設置大小和位置lv_obj_set_size(calendar, 230, 200);lv_obj_center(calendar);// 設置今天日期(用于高亮)lv_calendar_set_today_date(calendar, 2025, 5, 17);// 設置當前顯示的日期lv_calendar_set_showed_date(calendar, 2025, 5);// 添加箭頭頭部切換月份lv_calendar_header_arrow_create(calendar);// 添加事件lv_obj_add_event_cb(calendar, calendar_event_cb, LV_EVENT_VALUE_CHANGED, NULL);// 🎨 設置風格:背景色、邊框、圓角lv_obj_set_style_bg_color(calendar, lv_palette_lighten(LV_PALETTE_BLUE, 3), 0);lv_obj_set_style_border_color(calendar, lv_palette_darken(LV_PALETTE_BLUE, 2), 0);lv_obj_set_style_border_width(calendar, 2, 0);lv_obj_set_style_radius(calendar, 10, 0);// 設置今天的高亮顏色lv_obj_set_style_bg_color(calendar, lv_palette_main(LV_PALETTE_RED), LV_PART_ITEMS | LV_STATE_PRESSED);lv_obj_set_style_bg_color(calendar, lv_palette_main(LV_PALETTE_GREEN), LV_PART_ITEMS | LV_STATE_CHECKED);lv_obj_set_style_text_color(calendar, lv_color_white(), LV_PART_ITEMS | LV_STATE_CHECKED);// 創建確認按鈕lv_obj_t* btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 100, 40);lv_obj_align(btn, LV_ALIGN_BOTTOM_MID, 0, -10);lv_obj_add_event_cb(btn, confirm_btn_event_cb, LV_EVENT_CLICKED, NULL);lv_obj_t* label = lv_label_create(btn);lv_label_set_text(label, "confirm");lv_obj_center(label);
}

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/80358.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/80358.shtml
英文地址,請注明出處:http://en.pswp.cn/web/80358.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多指標組合策略

該策略(MultiConditionStrategy)是一種基于多種技術指標和市場條件的交易策略。它通過綜合考慮多個條件來生成交易信號,從而決定買入或賣出的時機。 以下是對該策略的詳細分析: 交易邏輯思路 1. 條件1:星期幾和價格變化判斷 - 該條件根據當前日期是星期幾以及價格的變化…

BC 范式與 4NF

接下來我們詳細解釋 BC 范式(Boyce-Codd范式,簡稱 BCNF),并通過具體例子說明其定義和應用。 一、BC范式的定義 BC范式(Boyce-Codd范式,BCNF)是數據庫規范化理論中的一種范式,它比第…

基于 CSS Grid 的網頁,拆解頁面整體布局結構

通過以下示例拆解網頁整體布局結構&#xff1a; 一、基礎結構&#xff08;HTML骨架&#xff09; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"…

采購流程規范化如何實現?日事清流程自動化助力需求、采購、財務高效協作

采購審批流程全靠人推進&#xff0c;內耗嚴重&#xff0c;效率低下&#xff1f; 花重金上了OA&#xff0c;結果功能有局限、不靈活&#xff1f; 問題出在哪里&#xff1f;是我們的要求太多、太苛刻嗎&#xff1f;NO&#xff01; 流程名稱&#xff1a; 采購審批管理 流程功能…

全棧項目搭建指南:Nuxt.js + Node.js + MongoDB

全棧項目搭建指南&#xff1a;Nuxt.js Node.js MongoDB 一、項目概述 我們將構建一個完整的全棧應用&#xff0c;包含&#xff1a; 前端&#xff1a;Nuxt.js (SSR渲染)后端&#xff1a;Node.js (Express/Koa框架)數據庫&#xff1a;MongoDB后臺管理系統&#xff1a;集成在同…

NVMe簡介6之PCIe事務層

PCIe的事務層連接了PCIe設備核心與PCIe鏈路&#xff0c;這里主要基于PCIe事務層進行分析。事務層采用TLP傳輸事務&#xff0c;完整的TLP由TLPPrefix、TLP頭、Payload和TLP Digest組成。TLP頭是TLP中最關鍵的部分&#xff0c;一般由三個或四個雙字的長度&#xff0c;其格式定義如…

Python異常模塊和包

異常 當檢測到一個錯誤時&#xff0c;Python解釋器就無法繼續執行了&#xff0c;反而出現了一些錯誤的提示&#xff0c;這就是所謂的“異常”, 也就是我們常說的BUG 例如&#xff1a;以r方式打開一個不存在的文件。 f open(‘python1.txt’,‘r’,encoding‘utf-8’) 當我們…

匯編:循環程序設計

一、 實驗要求 熟練掌握循環程序設計的基本方法熟練掌握單片機外部存儲空間的訪問方法 二、 實驗設計 1.整體思路 先初始化一些寄存器和數據存儲位置&#xff0c;然后調用兩個子程序Procedure1和Procedure2&#xff0c;分別從SRC復制數據到DEST&#xff0c;一個從開頭到末尾&…

典籍知識問答模塊AI問答bug修改

一、修改流式數據處理問題 1.問題描述&#xff1a;由于傳來的數據形式如下&#xff1a; event:START data:350 data:< data:t data:h data:i data:n data:k data:> data: data: data: data: data:嗯 data:&#xff0c; 導致需要修改獲取正常的當前信息id并更…

【金倉數據庫征文】- 金融HTAP實戰:KingbaseES實時風控與毫秒級分析一體化架構

文章目錄 引言&#xff1a;金融數字化轉型的HTAP引擎革命一、HTAP架構設計與資源隔離策略1.1 混合負載物理隔離架構1.1.1 行列存儲分區策略1.1.2 四級資源隔離機制 二、實時流處理與增量同步優化2.1 分鐘級新鮮度保障2.1.1 WAL日志增量同步2.1.2 流計算優化 2.2 物化視圖實時刷…

季報中的FPGA行業:U型反轉,春江水暖

上周Lattice,AMD兩大廠商相繼發布2025 Q1季報,盡管恢復速度各異,但同時傳遞出FPGA行業整體回暖的復蘇信號。 5月5日,Lattice交出了“勉強及格”的答卷,報告季度營收1億2000萬,與華爾街的預期基本相符。 對于這家聚焦在中小規模器件的領先廠商而言,按照其CEO的預期,長…

使用 javap 深入理解 Java 字節碼

引言 Java 是一種廣泛使用的高級編程語言,其獨特之處在于編譯后的代碼不是直接的機器碼,而是一種稱為字節碼的中間表示形式。字節碼存儲在 .class 文件中,由 Java 虛擬機 (JVM) 解釋或即時編譯為特定平臺的機器碼。這種設計賦予了 Java 平臺無關性,即“一次編寫,到處運行…

LeetCode_sql刷題(3482.分析組織層級)

題目描述&#xff1a;3482. 分析組織層級 - 力扣&#xff08;LeetCode&#xff09; 表&#xff1a;Employees ------------------------- | Column Name | Type | ------------------------- | employee_id | int | | employee_name | varchar | | manager_id …

工業場景輪式巡檢機器人純視覺識別導航的優勢剖析與前景展望

一、引言 1.1 研究背景與意義 在工業 4.0 的大背景下&#xff0c;工業生產的智能化、自動化水平不斷提高&#xff0c;對工業場景的巡檢工作提出了更高的要求。傳統的人工巡檢方式不僅效率低下、成本高昂&#xff0c;而且容易受到人為因素的影響&#xff0c;難以滿足現代工業生…

《棒球萬事通》球類運動有哪些項目·棒球1號位

以棒球運動為例&#xff0c;棒球運動涉及多個核心項目和比賽形式&#xff0c;以下為主要分類&#xff1a; 一、比賽環節 投球&#xff08;Pitching&#xff09; 防守方投手向擊球員投球&#xff0c;目標是讓對方難以擊中或制造出局。 擊球&#xff08;Batting&#xff09; …

第五項修煉:打造學習型組織

最近一直接到的需求&#xff0c;都是公司董事長或總經理都特別推崇《第五項修煉&#xff1a;打造學習型組織》的內容&#xff0c;讓各個層級的管理者都持續學習、應用、實踐。我不禁開始反思&#xff0c;這背后到底隱藏著什么原因&#xff1f; 隨著商業環境的變化和復雜性的增加…

國內AWS CloudFront與S3私有桶集成指南:安全訪問靜態內容

在現代web應用架構中,將靜態內容存儲在Amazon S3中并通過CloudFront分發是一種常見且高效的做法。本指南將詳細介紹如何創建私有S3桶,配置CloudFront分配,并使用Origin Access Identity (OAI)來確保安全訪問。 步驟1:創建S3桶 首先,我們需要創建一個名為"b-static&…

BUUCTF——Nmap

BUUCTF——Nmap 進入靶場 類似于一個nmap的網站 嘗試一下功能 沒什么用 看看數據包 既然跟IP相關 偽造一個XXF看看 拼接了一下沒什么用 果然沒這么簡單 嘗試一下命令注入 構造payload 127.0.0.1 | ls 應該有過濾 加了個\ 直接構造個php木馬上傳試試 127.0.0.1 | <?…

NPN、PNP三極管的應用

由于電路知識實在是難以拿出手&#xff0c;在面試的時候被問到三極管相關問題&#xff0c;相當地尷尬。在網上簡要地學習了相關的理論知識&#xff0c;在這里給出自己的理解。更為基礎的原理在這里并不提及。我們面向實際應用學習即可。 我們知道常見的三極管總是硅管&#xff…

系統架構設計師案例分析題——軟件架構設計篇

重中之重&#xff0c;本題爭取拿下25滿分~ 目錄 一.核心知識 1.什么是架構風格 2.RUP的9個核心工作流 3.企業應用集成方式 4.軟件質量屬性 5.SySML系統建模語言9種圖 6.云計算架構 7.中間件 8.構件、連接件、軟件重用 9.層次型架構的缺點 10.架構開發方法ADM 11.微…