当前位置: 首页 > 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.dtcms.com/a/187136.html

相关文章:

  • Linux服务器管理面板新选择:mdserver-web深度解析与使用指南
  • sqlilab-Less-18
  • CHIP第四次作业
  • Python笔记:windows下永久配置pip镜像源
  • 5.10-套接字通信 - C++
  • 算法题(145):货仓选址
  • SpringAI框架中的RAG模块详解及应用示例
  • Halcon案例(一):C#联合Halcon识别路由器上的散热孔
  • 定时器设计
  • python打包成exe
  • 中国古代史4
  • Vue 3 实现转盘抽奖效果
  • 对抗进行性核上性麻痹,健康护理筑牢生活防线
  • 大数据课设——基于电影数据集,分析导演影响力,绘制各种可视化图表
  • python练习-20250512
  • Jupyter-AI Pandas-AI本地使用功能优化
  • 【A2A】根据A2A的协议标准,不同架构的2个大模型agent的交互,是否都需要实现和对接 client和server模块?
  • 8天Python从入门到精通【itheima】-1~5
  • 前端面试每日三题 - Day 31
  • 基于 ABP vNext 框架实现高可用高性能的 Modbus 通信网关
  • Python实例题:pygame开发打飞机游戏
  • 【LeetCode】49.字母异位词分组
  • leetcode 18. 四数之和
  • 【Linux】进程状态、优先级、切换和调度
  • 三、transformers基础组件之Model
  • 判断一个数组有没有重复值
  • PID与模糊PID系统设计——基于模糊PID的水下航行器运动控制研究Simulink仿真(包含设计报告)
  • 基于STM32、HAL库的BMP388 气压传感器 驱动程序设计
  • Blender 入门教程(一):模型创建
  • vue-pdf-embed预览PDF