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

LVGL(lv_btnmatrix矩阵按钮)

文章目录

    • 🔧 1. 基本概念
      • 📌 lv\_btnmatrix 是什么?
    • 🧱 2. 基本结构和用法
      • ✅ 创建按钮矩阵
      • ✅ 设置按钮文字
    • 🧰 3. 设置按钮行为
    • 🔄 4. 响应按钮点击
    • 🎨 5. 自定义样式
    • 📌 6. 使用技巧
    • 🎯 7. 典型应用示例:数字键盘
    • ✅ 总结


lv_btnmatrixLVGL(Light and Versatile Graphics Library) 中的一个非常实用的控件,用于在一个区域内布局一组“按钮”,常见于:

  • 键盘(数字键盘、软键盘)
  • 控制面板
  • 多选/单选按钮组等

下面我将分为几个方面为你详细讲解 lv_btnmatrix 的原理、常用用法及关键函数。


🔧 1. 基本概念

📌 lv_btnmatrix 是什么?

lv_btnmatrix(按钮矩阵)是一个将多个文本按钮排布成网格状的控件,每个按钮可以独立响应点击事件。


🧱 2. 基本结构和用法

✅ 创建按钮矩阵

lv_obj_t *btnm = lv_btnmatrix_create(lv_scr_act());  // 在当前屏幕创建按钮矩阵

✅ 设置按钮文字

static const char *btnm_map[] = {"1", "2", "3", "\n","4", "5", "6", "\n","7", "8", "9", "\n","Del", "0", "OK", ""
};lv_btnmatrix_set_map(btnm, btnm_map);
  • 每个字符串是一个按钮的文字
  • "\n" 表示换行
  • ""(空字符串)表示结束符

🧰 3. 设置按钮行为

可以通过 ctrl_map 配置每个按钮的行为,比如是否可点击、是否为单选、是否隐藏等。

lv_btnmatrix_set_ctrl_map(btnm, ctrl_map);

控制位(LV_BTNMATRIX_CTRL_*)有:

控制位宏含义
LV_BTNMATRIX_CTRL_HIDDEN隐藏该按钮
LV_BTNMATRIX_CTRL_NO_REPEAT禁止长按连续触发
LV_BTNMATRIX_CTRL_DISABLED禁用按钮
LV_BTNMATRIX_CTRL_CHECKABLE可切换状态
LV_BTNMATRIX_CTRL_CHECKED初始时为选中状态
LV_BTNMATRIX_CTRL_CLICK_TRIG是否触发事件

🔄 4. 响应按钮点击

你需要注册一个事件处理器:

void btnm_event_handler(lv_event_t *e)
{lv_event_code_t code = lv_event_get_code(e);lv_obj_t *btnm = lv_event_get_target(e);if (code == LV_EVENT_VALUE_CHANGED){const char *txt = lv_btnmatrix_get_btn_text(btnm, lv_btnmatrix_get_selected_btn(btnm));printf("Pressed: %s\n", txt);}
}lv_obj_add_event_cb(btnm, btnm_event_handler, LV_EVENT_ALL, NULL);

🎨 5. 自定义样式

你可以使用 lv_obj_set_style_* 或使用主题设置按钮矩阵、单元格的样式:

lv_obj_set_style_bg_color(btnm, lv_palette_main(LV_PALETTE_BLUE), 0);
lv_obj_set_style_text_font(btnm, &lv_font_montserrat_20, 0);

📌 6. 使用技巧

技巧方法
设置按钮不可点lv_btnmatrix_clear_btn_ctrl(btnm, idx, LV_BTNMATRIX_CTRL_CLICK_TRIG);
设置默认选中lv_btnmatrix_set_selected_btn(btnm, idx);
获取按钮索引lv_btnmatrix_get_selected_btn(btnm);
修改单个按钮文字lv_btnmatrix_set_btn_text(btnm, idx, "NewText");

🎯 7. 典型应用示例:数字键盘

static const char * num_map[] = {"1", "2", "3", "\n","4", "5", "6", "\n","7", "8", "9", "\n",".", "0", "Del", ""
};lv_obj_t *kb = lv_btnmatrix_create(lv_scr_act());
lv_btnmatrix_set_map(kb, num_map);
lv_obj_add_event_cb(kb, kb_event_cb, LV_EVENT_ALL, NULL);

✅ 总结

功能点描述
创建函数lv_btnmatrix_create()
设置按钮文字lv_btnmatrix_set_map()
设置按钮行为lv_btnmatrix_set_ctrl_map()
获取点击内容lv_btnmatrix_get_btn_text()
控制单个按钮属性lv_btnmatrix_set_btn_ctrl()

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

相关文章:

  • Babel 基础使用指南:从安装到编译的完整流程
  • MySQL主从复制
  • CacheBackEmbedding 组件的运行流程和使用注意事项
  • 使用 SHAP 进行特征交互检测:揭示变量之间的复杂依赖关系
  • 实战项目6(09)
  • 【计算机视觉】OpenCV实战项目:Text-Extraction-Table-Image:基于OpenCV与OCR的表格图像文本提取系统深度解析
  • Java泛型补充与理解
  • LangChain 使用指南与原理
  • ENSP-OSPF综合实验
  • 无人机空中物流优化:用 Python 打造高效配送模型
  • 类型别名与接口的对比与选择
  • 二、transformers基础组件之Tokenizer
  • 华为OD机试真题——九宫格按键输入(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • Github 2025-05-11 php开源项目日报 Top10
  • 探索虚拟化:云计算时代的资源优化之道
  • C++ RAII机制
  • 用C语言实现的——一个支持完整增删查改功能的二叉排序树BST管理系统,通过控制台实现用户与数据结构的交互操作。
  • 单细胞RNA测序数据分析与可视化:从基础原理到高级应用
  • 每日c/c++题 备战蓝桥杯(洛谷P1115 最大子段和)
  • Day21打卡—常见降维算法
  • 【EBNF】EBNF:扩展巴克斯-诺尔范式文件格式与实用写法详解
  • 支持向量机的回归用法详解
  • “爱生活”小项目问题总结
  • AVL树解析
  • 控制台打印带格式内容
  • Python Cookbook-7.9 访问 MySQL 数据库
  • 游戏引擎学习第271天:生成可行走的点
  • 【计算机视觉】OpenCV实战项目:ETcTI_smart_parking智能停车系统深度解析
  • 毫米波雷达点云SLAM系统
  • 【python】基础知识点100问