当前位置: 首页 > news >正文

LVGL(lv_list列表控件)

文章目录

    • 🌟 一、lv\_list 的基本概念
    • 🛠️ 二、lv\_list 的常用 API
      • 1. 创建列表对象
      • 2. 添加按钮(项目)
      • 3. 设置点击事件回调
      • 4. 获取按钮文字
      • 5. 设置样式(可选)
    • 🔁 三、lv\_list 的滚动和布局
    • ✅ 四、完整示例代码
    • 🧠 五、进阶使用技巧
    • 📌 六、LVGL v8 与 v7 的区别


lv_list 是 LVGL(Light and Versatile Graphics Library)中的一个 UI 组件,用于创建可滚动的项目列表,类似于常见的设置菜单或选项列表,支持图标、文字、点击事件等,非常适合在嵌入式 GUI 项目中使用。


🌟 一、lv_list 的基本概念

lv_list 是一个容器(container),可以容纳多个子项(list button)。每个子项可以是带图标的按钮、仅文字的按钮,甚至可以进一步自定义为复杂内容。

每一个子项本质上是一个 lv_obj_t*,并且通常是通过 lv_list_add_btn() 添加。


🛠️ 二、lv_list 的常用 API

1. 创建列表对象

lv_obj_t * list = lv_list_create(lv_scr_act());  // 创建在当前活动屏幕上

2. 添加按钮(项目)

lv_obj_t * btn1 = lv_list_add_btn(list, LV_SYMBOL_FILE, "File");
lv_obj_t * btn2 = lv_list_add_btn(list, LV_SYMBOL_SAVE, "Save");
  • LV_SYMBOL_FILE:图标(可省略,用 NULL
  • "File":文本

每个按钮都是可点击的 lv_obj,你可以注册事件。

3. 设置点击事件回调

lv_obj_add_event_cb(btn1, my_event_cb, LV_EVENT_CLICKED, NULL);

4. 获取按钮文字

const char * txt = lv_list_get_btn_text(btn1);

5. 设置样式(可选)

可以通过 lv_obj_add_style() 设置列表本身、按钮等的背景色、边框、字体等样式。


🔁 三、lv_list 的滚动和布局

  • 列表默认垂直方向滚动,超出部分自动显示滚动条。
  • LVGL 8.x 之后使用 flex 布局自动管理子项排列。
  • 每个按钮的大小会自动适配内容,也可以手动设置大小。

✅ 四、完整示例代码

void my_event_cb(lv_event_t * e) {lv_event_code_t code = lv_event_get_code(e);lv_obj_t * btn = lv_event_get_target(e);if (code == LV_EVENT_CLICKED) {const char * txt = lv_list_get_btn_text(btn);printf("Clicked: %s\n", txt);}
}void create_list_example() {lv_obj_t * list = lv_list_create(lv_scr_act());lv_obj_set_size(list, 200, 200);lv_obj_center(list);lv_obj_t * btn1 = lv_list_add_btn(list, LV_SYMBOL_WIFI, "Wi-Fi");lv_obj_t * btn2 = lv_list_add_btn(list, LV_SYMBOL_SETTINGS, "Settings");lv_obj_add_event_cb(btn1, my_event_cb, LV_EVENT_CLICKED, NULL);lv_obj_add_event_cb(btn2, my_event_cb, LV_EVENT_CLICKED, NULL);
}

🧠 五、进阶使用技巧

功能方法
设置图标间距自定义样式或修改 pad
支持多级菜单点击按钮后创建新 lv_list 或切换页面
添加分割线可使用空白按钮或自定义绘图
添加长按事件支持LV_EVENT_LONG_PRESSED

📌 六、LVGL v8 与 v7 的区别

  • v8 使用 lv_obj_add_event_cb,而 v7 使用 lv_obj_set_event_cb
  • v8 使用 flex 布局自动管理,v7 布局方式更原始
  • 建议使用 LVGL v8 以上版本,功能更完善、API 更统一

http://www.xdnf.cn/news/403975.html

相关文章:

  • ORB特征点检测算法
  • 如何更改默认字体:ONLYOFFICE 协作空间、桌面编辑器、文档测试示例
  • Spring AI 与 Hugging Face 深度集成:打造高效文本生成应用
  • 扩展:React 项目执行 yarn eject 后的 config 目录结构详解
  • Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验
  • 七、MyBatis-Plus高级用法:最优化持久层开发
  • 从0开始学习大模型--Day07--大模型的核心知识点
  • TCPIP详解 卷1协议 十 用户数据报协议和IP分片
  • 还在用付费?免费它不香吗
  • 集群脑裂危机!金仓数据库双主故障如何紧急救援?​
  • 电商物流管理优化:从网络重构到成本管控的全链路解析
  • OSI 7层模型
  • 详解RabbitMQ工作模式之发布确认模式
  • nvm管理node版本
  • 如何使用Selenium?
  • 【Jenkins简单自动化部署案例:基于Docker和Harbor的自动化部署流程记录】
  • Golang企业级商城高并发微服务实战
  • RNN(循环神经网络)原理与结构
  • 【layout组件 与 路由镶嵌】vue3 后台管理系统
  • SSTI记录
  • 【小记】word批量生成准考证
  • GPU SIMT架构的极限压榨:PTX汇编指令级并行优化实践
  • 图文展示HDFS、YARN、MapReduce三者关系
  • WEBSTORM前端 —— 第3章:移动 Web —— 第1节:平面转换、渐变
  • Redisson在业务处理中失败后的应对策略:保障分布式系统的可靠性
  • 深入掌握Linux计划任务与进程管理:从基础到实战
  • Pandas教程:被冷落的数据结构-Panel
  • 联想 SR550 服务器,配置 RAID 5教程!
  • MySQL创建了一个索引表,如何来验证这个索引表是否使用了呢?
  • window 显示驱动开发-将虚拟地址映射到内存段(二)