LVGL:拓展部件——日历 lv_calendar

2024-04-04 11:52

本文主要是介绍LVGL:拓展部件——日历 lv_calendar,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、概述

此控件特点:

  • 以7x7矩阵的形式展示任何一个月的日期,即在一个7行7列的网格中呈现。
  • 显示星期的名称,即每一列对应一个特定的星期几(如周一、周二等)。
  • 高亮显示当前日期(即今天)。
  • 支持高亮用户自定义的日期,允许用户突出显示特定的日期以供关注或标记。

二、部件和样式

2.1、使用底层按钮矩阵(lv_btnmatrix)对象

此控件内部采用了 lv_btnmatrix 对象作为基础结构,以此来组织和排列日历中的日期及星期名称,形成一个矩阵布局。

2.2、包含组件元素

  • LV_PART_MAIN:日历的整体背景。
  • LV_PART_ITEMS:日历中的具体日期以及星期名称。由于底层采用 lv_btnmatrix,每个日期和星期名称都表现为一个按钮。针对这些按钮,设置了特定的控制标志和添加了自定义绘制事件,以实现特定的样式效果。

三、相关函数

1、void lv_calendar_set_today_date(lv_obj_t *obj, uint32_t year, uint32_t month, uint32_t day)

设置当前日期。

2、void lv_calendar_set_showed_date(lv_obj_t *obj, uint32_t year, uint32_t month)

显示的年份和月份。

    lv_obj_t * obj = lv_calendar_create(lv_scr_act());lv_calendar_set_today_date(obj, 2024, 4, 3);lv_obj_set_size(obj, 300, 300);lv_obj_center(obj);lv_calendar_set_showed_date(obj, 2024, 4);

3、void lv_calendar_set_highlighted_dates(lv_obj_t *obj, lv_calendar_date_t highlighted[], uint16_t date_num)

设置日历控件特定日期高亮显示。参数3是要高亮显示的日期数量。

    lv_obj_t * obj = lv_calendar_create(lv_scr_act());lv_calendar_set_today_date(obj, 2024, 4, 3);lv_obj_set_size(obj, 300, 300);lv_obj_center(obj);lv_calendar_set_showed_date(obj, 2024, 4);static lv_calendar_date_t highlighted_dates[] ={{ .year = 2024, .month = 4, .day = 9 },{ .year = 2024, .month = 4, .day = 21 },{ .year = 2024, .month = 4, .day = 26 }};lv_calendar_set_highlighted_dates(obj, highlighted_dates, 3);

4、void lv_calendar_set_day_names(lv_obj_t *obj, const char **day_names)

设置星期名称。

    lv_obj_t * obj = lv_calendar_create(lv_scr_act());lv_calendar_set_today_date(obj, 2024, 4, 3);lv_obj_set_size(obj, 600, 300);lv_obj_center(obj);lv_calendar_set_showed_date(obj, 2024, 4);static lv_calendar_date_t highlighted_dates[] ={{ .year = 2024, .month = 4, .day = 9 },{ .year = 2024, .month = 4, .day = 21 },{ .year = 2024, .month = 4, .day = 26 }};lv_calendar_set_highlighted_dates(obj, highlighted_dates, 3);lv_obj_set_style_text_font(obj,&lv_font_siyuanheiti16,LV_PART_MAIN);static const char *day_names[] ={"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};lv_calendar_set_day_names(obj, day_names);

5、lv_obj_t *lv_calendar_get_btnmatrix(const lv_obj_t *obj)

获取其内部用于显示日期和星期名称的按钮矩阵。

6、const lv_calendar_date_t *lv_calendar_get_today_date(const lv_obj_t *calendar)

获取今天的日期。

7、const lv_calendar_date_t *lv_calendar_get_showed_date(const lv_obj_t *calendar)

获取当前显示的日期,即用户当前看到的年份、月份组合。

8、lv_calendar_date_t *lv_calendar_get_highlighted_dates(const lv_obj_t *calendar)

获取所有高亮日期。

9、uint16_t lv_calendar_get_highlighted_dates_num(const lv_obj_t *calendar)

获取高亮显示日期数量。

10、lv_obj_t * lv_calendar_header_arrow_create(lv_obj_t * parent)

设置箭头形式的日历头。

    lv_obj_t * obj = lv_calendar_create(lv_scr_act());lv_calendar_set_today_date(obj, 2024, 4, 3);lv_obj_set_size(obj, 600, 300);lv_obj_center(obj);lv_calendar_set_showed_date(obj, 2024, 4);static lv_calendar_date_t highlighted_dates[] ={{ .year = 2024, .month = 4, .day = 9 },{ .year = 2024, .month = 4, .day = 21 },{ .year = 2024, .month = 4, .day = 26 }};lv_calendar_set_highlighted_dates(obj, highlighted_dates, 3);lv_obj_set_style_text_font(obj,&lv_font_siyuanheiti16,LV_PART_MAIN);static const char *day_names[] ={"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};lv_calendar_set_day_names(obj, day_names);lv_calendar_header_arrow_create(obj);

11、lv_obj_t * lv_calendar_header_dropdown_create(lv_obj_t * parent)

设置下拉列表形式的日历头。

    lv_obj_t * obj = lv_calendar_create(lv_scr_act());static const char *day_names[] ={"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};lv_calendar_set_day_names(obj, day_names);lv_calendar_set_today_date(obj, 2024, 4, 3);lv_calendar_set_showed_date(obj, 2024, 02);lv_obj_set_size(obj, 600, 300);lv_obj_center(obj);static lv_calendar_date_t highlighted_dates[] ={{ .year = 2024, .month = 4, .day = 9 },{ .year = 2024, .month = 4, .day = 21 },{ .year = 2024, .month = 4, .day = 26 }};lv_calendar_set_highlighted_dates(obj, highlighted_dates, 3);lv_obj_set_style_text_font(obj,&lv_font_siyuanheiti16,LV_PART_MAIN);lv_calendar_header_dropdown_create(obj);lv_calendar_set_showed_date(obj, 2024, 04);

可能需要在源码添加年份:

这里也要改成最新年份: 

12、 lv_res_t lv_calendar_get_pressed_date(const lv_obj_t *calendar, lv_calendar_date_t *date)

获取日历控件当前被按下的日期。

返回值:

  • LV_RES_OK:有一个有效的按下日期。参数2已填充了当前被按下的日期信息。
  • LV_RES_INV:当前没有被按下的日期。可能是用户未进行任何按压操作,或者已取消了之前的按压状态。
static void event_handler3(lv_event_t * e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t * obj = lv_event_get_current_target(e);if(code == LV_EVENT_VALUE_CHANGED){lv_calendar_date_t date;if(lv_calendar_get_pressed_date(obj, &date)){std::cout<<"选中日期:"<<(int)date.year<<(int)date.month<<(int)date.day<<std::endl;}}
}int main(int argc, char **argv)
{lv_init();hal_init();lv_log_register_print_cb(esp32_log_cb);lv_obj_t * obj = lv_calendar_create(lv_scr_act());static const char *day_names[] ={"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};lv_calendar_set_day_names(obj, day_names);lv_calendar_set_today_date(obj, 2024, 4, 3);lv_calendar_set_showed_date(obj, 2024, 02);lv_obj_set_size(obj, 600, 300);lv_obj_center(obj);static lv_calendar_date_t highlighted_dates[] ={{ .year = 2024, .month = 4, .day = 9 },{ .year = 2024, .month = 4, .day = 21 },{ .year = 2024, .month = 4, .day = 26 }};lv_calendar_set_highlighted_dates(obj, highlighted_dates, 3);lv_obj_set_style_text_font(obj,&lv_font_siyuanheiti16,LV_PART_MAIN);lv_calendar_header_dropdown_create(obj);lv_calendar_set_showed_date(obj, 2024, 04);lv_obj_add_event_cb(obj, event_handler3, LV_EVENT_ALL, NULL);while (1){lv_timer_handler();usleep(5 * 1000);}return 0;
}

这篇关于LVGL:拓展部件——日历 lv_calendar的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875707

相关文章

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL

多线程并发拓展

死锁 死锁是指两个或两个以上的进程,因争夺资源而造成一种互相等待的作用,如果没有外力作用它们都将无法推进下去,此时我们就称系统进入死锁状态 死锁必要条件 互斥条件:进程对所分配的资源进行排他性的使用,在一段时间内某资源只有一个资源占用,如果此时还有其它进程请求资源,那么请求者只能等待 请求和保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其它资源占用,此时请求进程

Python 爬虫入门 - 基础数据采集流程拓展

在网络爬虫的世界里,数据就是一切。通过爬虫技术,你可以自动化地收集各种类型的公开数据,从文本和图片到复杂的结构化信息,这些数据为各类分析和应用提供了基础。 本教程将引导你深入了解爬虫可以采集的数据种类,如何有效地获取这些数据,并探讨如何使用代理服务来规避限制与增强爬虫的灵活性。无论是初学者还是有经验的开发者,这些知识都将帮助你在网络数据采集中更加游刃有余。 文章目录 可采集的数据基本操作

6、LVGL控件-线条、图片、按钮矩阵

本篇文章目录导航 ♠♠ LVGL控件-线条、图片、按钮矩阵 ♣♣♣♣ 一、LVGL 线条部件 ♦♦♦♦♦♦♦♦ 1.1 线条部件组成部分 ♦♦♦♦♦♦♦♦ 1.2 线条部件基本API ♦♦♦♦♦♦♦♦ 1.3 实验小演示 ♣♣♣♣ 二、LVGL 图片部件 ♦♦♦♦♦♦♦♦ 2.1 图片部件组成部分 ♦♦♦♦♦♦♦♦ 2.2 图片部件基本API ♦♦♦♦♦♦♦♦ 2.3 实验小演示(基础操作) ♦

【SGU】115. Calendar 水题= =

传送门:【SGU】115. Calendar 题目分析:2001年1月1号星期1,然后就没什么好说的了= = 代码如下: #include <map>#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespac

LVGL 控件之复选框(lv_checkbox)和下拉列表(lv_dropdown)

目录 一、复选框1、组成2、设置复选框文本3、复选框部件的状态4、复选框事件5、API 函数 二、下拉列表1、组成2、选项2.1 添加选项2.2 获取当前选中的选项 3、设置3.1 设置列表展开方向3.2 设置下拉列表图标3.3 设置列表常显文本 4、事件5、API 函数 一、复选框 1、组成 复选框部件由两个部分组成:主体和勾选框,示意图如下: LV_PART_M

linux文件的拓展属性

一、概述 文件的扩展属性(EA) 即以名称-值对形式将任意元数据与文件 i 节点关联 起来的技术。 2. EA 可用于实现访问列表(第 17 章)和文件能力(第 39 章)。 二、EA 命名空间 EA 的命名格式为 namespace.name。其中 namespace 用来把 EA 从功能上划分为截然不同的几大类,而 name 则用来在既定命名空间内唯一标识某个 EA。 可

<Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?

前言 本专栏是关于Rust的GUI库egui的部件讲解及应用实例分析,主要讲解egui的源代码、部件属性、如何应用。 环境配置 系统:windows 平台:visual studio code 语言:rust 库:egui、eframe 概述 本文是本专栏的第九篇博文,主要讲述下拉列表部件combobox的使用。 事实上,类似于iced,egui都提供了示例程序,本专栏的博文都是建立在官方示