LVGL 控件之日历(lv_calendar)

news2024/11/15 12:00:20

目录

  • 一、日历
    • 1、组成
    • 2、创建日历
    • 3、日期的设置/显示
      • 3.1 设置当前日期
      • 3.2 显示日期
      • 3.3 日历头
    • 4、设置日期高亮
    • 5、设置日名
    • 6、事件
    • 7、API 函数


一、日历

1、组成

日历部件由两个部分组成:

  1. 主体背景 LV_PART_MAIN
  2. 各个按钮 LV_PART_ITEMS(指向日期和名称)。

  • LV_PART_MAIN 日历的背景。使用所有与背景相关的样式属性。
  • LV_PART_ITEMS 指日期和日期名称。设置按钮矩阵控制标志来区分不同的按钮(日期),并添加自定义绘制(drawer)事件,可参考如下方式修改按钮的属性:
    • 日期名称没有边框,没有背景,用灰色绘制
    • 矩阵中上个月和下个月的天数有 LV_BUTTONMATRIX_CTRL_DISABLED 标志
    • 今天(你指定的日期)有较厚的边框(使用主题的主色)
    • 突出显示的日期有一些不透明度(使用主题的主色)。

2、创建日历

在LVGL 中,用户需要创建日历部件,可调用以下函数:

lv_obj_t *lv_calendar_create(lv_obj_t *parent);

例:

lv_obj_t *calendar = lv_calendar_create(lv_scr_act());
lv_obj_set_size(calendar, 300, 300);
lv_obj_align(calendar, LV_ALIGN_CENTER, 0, 0);

3、日期的设置/显示

3.1 设置当前日期

在默认的情况下,当用户创建出一个日历部件,该部件的当前日期为 2020 年1 月1 号,如果用户需要设置日期,则可以调用lv_calendar_set_today_date 函数。

注意:当前日期并不等同于实时显示的日期

3.2 显示日期

如果我们仅仅是设置了当前日期,日期部件并不会自动显示该日期,所以我们必须手动跳转当前日期对应的月份,相关的函数为lv_calendar_set_shown_date

lv_calendar_set_today_date(calendar, 2024, 9, 1);
lv_calendar_set_showed_date(calendar, 2024, 9);

3.3 日历头

可以看到,刚才创建的日历除了能看当前月的信息外什么都干不了,所以要加上日历头方便我们操作。

日历部件设置日历头的方式有两个,如下所示:

  1. 调用 lv_calendar_header_dropdown_create 函数设置;(下拉列表)
  2. 调用 lv_calendar_header_arrow_create 函数设置。(按键)
lv_calendar_header_dropdown_create(lv_scr_act(), calendar);

源代码里没有 2024 年,所以直接显示的是 1901 年。因此要在源代码中加入 2024 年

在文件 lvgl\src\extra\widgets\calendar\lv_calendar_header_dropdown.c 下:

static const char * year_list = {
    "2023\n2022\n2021\n"
    "2020\n2019\n2018\n2017\n2016\n2015\n2014\n2013\n2012\n2011\n2010\n2009\n2008\n2007\n2006\n2005\n2004\n2003\n2002\n2001\n"
    "2000\n1999\n1998\n1997\n1996\n1995\n1994\n1993\n1992\n1991\n1990\n1989\n1988\n1987\n1986\n1985\n1984\n1983\n1982\n1981\n"
    "1980\n1979\n1978\n1977\n1976\n1975\n1974\n1973\n1972\n1971\n1970\n1969\n1968\n1967\n1966\n1965\n1964\n1963\n1962\n1961\n"
    "1960\n1959\n1958\n1957\n1956\n1955\n1954\n1953\n1952\n1951\n1950\n1949\n1948\n1947\n1946\n1945\n1944\n1943\n1942\n1941\n"
    "1940\n1939\n1938\n1937\n1936\n1935\n1934\n1933\n1932\n1931\n1930\n1929\n1928\n1927\n1926\n1925\n1924\n1923\n1922\n1921\n"
    "1920\n1919\n1918\n1917\n1916\n1915\n1914\n1913\n1912\n1911\n1910\n1909\n1908\n1907\n1906\n1905\n1904\n1903\n1902\n1901"
};

还有两处:

现在就正常了:

lv_calendar_header_arrow_create(lv_scr_act(), calendar, 20);

4、设置日期高亮

如果用户需要某个日期高亮显示,可调用 lv_calendar_set_highlighted_dates 函数来进行设置。

lv_calendar_date_t day[1];

day[0].year = 2024;
day[0].month = 9;
day[0].day = 2;
lv_calendar_set_highlighted_dates(calendar, day, 1);

5、设置日名

在默认的情况下,日历都是以英文的形式展示(Su、Mo、Tu、We、Th、Fr 和 Sa),如果用户想设置成中文的日名,可调用lv_calendar_set_day_names 函数。

const char* day_names[7] = { "1", "2","3","4","5","6","7", };

lv_calendar_set_day_names(calendar, day_names);

在这里插入图片描述

6、事件

LV_EVENT_VALUE_CHANGED:如果单击日期,则发送该事件,通过调用函数 lv_calendar_get_pressed_date(calendar, &date) 将 date 设置为当前按下的日期。如果存在,则返回 LV_RES_OK 有效的按下日期,否则 LV_RES_INVALID

7、API 函数

函数含义
lv_calendar_create()创建日历部件
lv_calendar_set_today_date()设置当前的日期
lv_calendar_set_showed_date()设置显示的日期
lv_calendar_set_highlighted_dates()设置高亮显示的日期
lv_calendar_set_day_names()设置日历(星期)的名称
lv_calendar_get_btnmatrix()获取日历的按钮矩阵对象
lv_calendar_get_today_date()获取当前的日期
lv_calendar_get_showed_date()获取当前显示的日期
lv_calendar_get_highlighted_dates()获取高亮显示的日期
lv_calendar_get_highlighted_dates_num()获取高亮显示的日期数量
lv_calendar_get_pressed_date()获取当前按下的日期

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2094582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kubeadm部署 Kubernetes(k8s) 高可用集群【V1.20 】

kubeadm是官方社区推出的一个用于快速部署kubernetes集群的工具。 calico.yaml kubernertes-dashboard.yaml 1. 安装要求 在开始之前,部署Kubernetes集群机器需要满足以下几个条件: 7台机器,操作系统Openeuler22.03 LTS SP4硬件配置&#…

【GPT】Coze使用开放平台接口-【1】创建插件

本文档主要描述在 coze 里面把开放平台的接口创建为插件,供别人调用。本系列调用的接口,都是调用快商通 AI 开放平台的接口 注意:如果是团队需要的,建议直接在团队空间里面创建这些,不然在个人空间创建得很爽&#xff…

Linux——命令行文件的管理(创建,复制,删除,移动文件,硬链接与软链接)

目录 一、创建文件和目录 二、复制文件和目录 三、删除文件和目录 四、移动文件和目录 五、硬链接和软链接(软链接也指符号链接) 索引节点(inode) 硬链接 软链接(符号链接) 一、创建文件和目录 mkdir命令可以创…

PCIe 复位:必须了解的PERST#

1.什么是PERST# PERST#作为 Fundamental Reset,是直接通过边带信号PERST#(PCI Express Reset)产生的。Fundamental Reset会复位整个PCIe设备,初始化所有与状态机相关的硬件逻辑,端口状态以及配置空间中的配置寄存器…

使用谷歌翻译的推荐理由及其他翻译工具推荐~

在现在快节奏的工作中,翻译工具已成为我们日常当中不可或缺的助手。其中,谷歌翻译以其高效、准确的特点,在众多翻译软件中脱颖而出。以下,我为您详细介绍为何推荐在工作中使用谷歌翻译,并同时提供其他三款优秀的翻译工…

linux内核驱动:pca953xIO扩展芯片驱动总结

目录 前言一、PCA9536芯片介绍二、驱动说明三、配置流程四、应用操作方式 前言 本笔记总结使用ti 的PCA953x进行SOC的GPIO扩展时步骤,基于linux内核版本5.10.xxx; 一、PCA9536芯片介绍 【1】PCA9536是基于i2c接口的GPIO扩展芯片,最大支持到…

【Java学习】多线程JUC万字超详解

所属专栏:Java学习 1. 多线程的概念 线程:线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程的实际运作单位 下面这些每一个能够运行的软件就是一个进程 并发:在同一时刻,有多个…

网络编程学习:TCP/IP协议

TCP/IP协议简介 TCP/IP协议包含了一系列的协议,也叫TCP/IP协议族(TCP/IP Protocol Suite,或TCP/IP Protocols),简称TCP/IP。 分层结构 为了能够实现不同类型的计算机和不同类型的操作系统之间进行通信,引…

Java中的锁(四)利用读写锁实现高性能网页缓存

文章目录 背景Ehcache2源码解析-如何实现缓存网页读写锁ReentrantReadWriteLock解析读写锁的特性读写锁是如何实现的? 如何将Ehcach2-web的源码迁移到Ehcach3中?/ 如何自定义Filter实现高性能网页缓存? 背景 在我们的销售页面,有…

Django+Vue酒店推荐系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 需要的环境3.2 Django接口层3.3 实体类3.4 config.ini3.5 启动类3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者&…

Linux文件操作(二)

Linux文件操作(二) 导语文件和目录维护chmodchownlink及其变体dir及其变体chdir和getcwd 扫描目录opendirreaddirtelldirseekdirclosedir示例程序 错误处理strerrorperror /procfcntlmmap相关mmapmsyncmunmap 总结参考文献 导语 文件操作的第二部分&…

juzige/Monitoring-System-基于Java语言的光伏监控系统

Photovoltaic-Monitoring-System-Based-on-Java-Language 基于Java语言的光伏监控系统光伏发电系统光伏软件系统光伏监控系统源码光伏发电系统源码-智电云 一、 介绍 光伏光伏发电预测逆变器监控逆变器数据采集光伏运维光伏电站光伏功率预测光伏监控系统光伏发电系统光伏软件…

【CSS in Depth 2 精译_022】3.6 一招搞定容器内元素间距的问题 + 3.7 本章小结

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

jQuery入门(六)jQuery实现瀑布流分页案例

一、瀑布流分页案例分析 1.1) 功能分析: 鼠标下拉,加载分页数据(10条) ,如下图: 案例分析: 1.2) 如何确定当前显示的数据已经浏览完毕? 公式:(滚动条距底部的距离 滚动条上下滚动的距离 当…

【Python篇】Python 类和对象:详细讲解(下篇)

文章目录 Python 类和对象:详细讲解(下篇)15. 接口和协议(Interfaces and Protocols)15.1 什么是接口?15.2 协议的基本概念例子:定义飞行协议详细解释输出示例 16. 装饰器模式(Decor…

A02、Java编程性能调优(02)

1、Stream如何提高遍历集合效率 1.1、什么是Stream 现在很多大数据量系统中都存在分表分库的情况。例如,电商系统中的订单表,常常使用用户 ID 的 Hash 值来实现分表分库,这样是为了减少单个表的数据量,优化用户查询订单的速度。 …

ZYNQ-Utlscale-RFSOC看门狗

ZYNQ-Utlscale-RFSOC看门狗复位 ZYNQ-Utlscale-RFSOC 看门狗的程序网上里程很少,开源资料也是几乎没有,最近需要用到这个功能,来来回回搞了一周才搞定。刚开始参考ZYNQ7000的资源,发现MPSOC不适用。很感谢下面的几篇文章&#xf…

探索TinyDB:轻量级数据库的优雅之旅

文章目录 探索TinyDB:轻量级数据库的优雅之旅背景:为何选择TinyDB?TinyDB是什么?如何安装TinyDB?简单库函数使用方法场景应用常见Bug及解决方案总结 探索TinyDB:轻量级数据库的优雅之旅 背景:为…

【电子通识】电子元器件可靠性基本概念

什么是电子元器件 电子元器件是电子产品的基本组成单元, 是电子元件和电子器件的总称。 通常电子元件指的是无源元件, 电子器件指的是有源器件。无源元件是对所供给的电能执行被动操作(如耗散、储蓄或释放等)的元件, 如…

《普通人学AI指南PDF》免费下载破10万。。。

你好,我是郭震 普通人如何开始AI,用好AI? 我在今年制作的《普通人学AI指南》PDF,从中或许能帮你找到答案: 1 PDF背景介绍 此PDF我是今年开始着手制作,到6月8日终版,中间历经反复多次修改&#x…