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

《lvgl基础学习 —— button》

1.lv_btn

  lv_btn是LVGL里最常用的“可点击容器控件”。本身不显示文字、图标,只负责接收点击、触摸事件 + 提供按钮外观

  按钮上的文字、图标,都是子对象(通常是lv_label)

 

最小使用步骤:

lv_obj_t *btn = lv_btn_create(parent);
lv_obj_t *label = lv_label_create(btn);
lv_label_set_text(label, "OK");
lv_obj_center(label);

 

demo:屏幕中央一个按钮,显示“Click me”

#include "lvgl.h"void ui_button_demo(void)
{/* 创建按钮 */lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 120, 50);lv_obj_center(btn);/* 按钮文字 */lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, "Click me");lv_obj_center(label);
}

 

按钮的灵魂:事件

  LVGL是事件驱动模型

  按钮点击 不等于 回调函数指针

  而是事件 + 回调

最常用的事件:

事件                     含义
LV_EVENT_PRESSED        按下
LV_EVENT_RELEASED       松开
LV_EVENT_CLICKED        完整点击(最常用)
LV_EVENT_LONG_PRESSED   长按

 

demo:点击按钮,文字变化

#include "lvgl.h"static lv_obj_t *label;static void btn_event_cb(lv_event_t *e)
{if(lv_event_get_code(e) == LV_EVENT_CLICKED) {lv_label_set_text(label, "Clicked!");}
}void ui_button_demo(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 150, 60);lv_obj_center(btn);lv_obj_add_event_cb(btn, btn_event_cb, LV_EVENT_CLICKED, NULL);label = lv_label_create(btn);lv_label_set_text(label, "Click me");lv_obj_center(label);
}

 

如何区分多个按钮

方法:user_data

static void btn_event_cb(lv_event_t *e)
{int id = (int)lv_event_get_user_data(e);if(id == 1) {printf("Button 1 clicked\n");} else if(id == 2) {printf("Button 2 clicked\n");}
}

创建按钮时:

lv_obj_add_event_cb(btn1, btn_event_cb, LV_EVENT_CLICKED, (void *)1);
lv_obj_add_event_cb(btn2, btn_event_cb, LV_EVENT_CLICKED, (void *)2);

 

按钮API说明:

设置大小:

lv_obj_set_size(btn, 200, 80);

设置位置:

lv_obj_align(btn, LV_ALIGN_TOP_MID, 0, 20);

设置圆角:

lv_obj_set_style_radius(btn, 10, 0);

设置背景颜色:

lv_obj_set_style_bg_color(btn, lv_color_hex(0x007AFF), 0);

 

按钮状态:

状态        说明
默认        松开
Pressed    按下
Disabled   禁用

 

禁用按钮:

lv_obj_add_state(btn, LV_STATE_DISABLED);

启用按钮:

lv_obj_clear_state(btn, LV_STATE_DISABLED);

 

http://www.jsqmd.com/news/110729/

相关文章:

  • 《lvgl基础学习 —— button》
  • FPGA 还是 ASIC?一篇把概念、差异和选择说清楚
  • AI助力MyBatis Collection处理:告别复杂SQL编写
  • 2025年新媒体推广公司排名:新媒体推广哪家好?新媒体营销推广有哪些? - mypinpai
  • 2025年西安不锈钢水箱制造商/供应商排行榜,看哪家工艺精湛? - 工业品牌热点
  • 3大策略彻底解决SGLang项目PyTorch版本兼容性难题
  • G6国际化图可视化架构设计与性能优化实战
  • 2025年陕西不锈钢水箱厂家推荐:源头不锈钢水箱厂家有哪些? - myqiye
  • 企业级小程序逆向分析:用unpackminiapp做竞品研究
  • 别再怕数学了!这套火了10版的经典,让普通人读懂世界的底层逻辑
  • AI产品经理知识库大公开:从小白到大佬的进阶之路
  • 结构线束EMC整改:事后补救到事前预防的范式转型|深圳南柯电子
  • JavaScript笔记-标准对象
  • 2025义乌净化工程设计建造服务商推荐榜:聚焦洁净车间与实验室建设服务优势 - 呼呼拉呼
  • AWVS扫描效率提升300%:高级技巧与自动化方案
  • 小白必看!Ubuntu20.04显卡驱动安装图解教程
  • Grafana 8.5 连接华为云 ES 7.10.2 问题排查记录
  • 深入理解 CSR / SSR / SSG:前端三种渲染模式的本质与选型
  • GitStats终极指南:5大核心功能深度解析
  • 2025年西安不锈钢水箱供应商排行榜,西安不锈钢水箱厂评价及制造商详细介绍 - 工业推荐榜
  • AI Agent、Agentic Workflow与Agentic AI:一文掌握!
  • 如何用Poor Man‘s T-SQL Formatter实现SQL代码规范化管理终极指南
  • (6)pytest+Selenium自动化测试-测试用例编写
  • Vectras VM:让手机变身全能桌面电脑的终极方案
  • 如何实现跨平台DMG文件处理?免费开源工具完整解决方案
  • 国产替代正当时:盘点2025-2026年中国主流的生物反应器品牌与厂家 - 品牌推荐大师1
  • 使用qemu 加载linux-6.18.1内核
  • .NET反混淆终极指南:深入解析NETReactorSlayer核心技术与实战应用
  • AI助力JDK11下载与配置:一键搞定开发环境
  • Vue打印设计神器:vue-plugin-hiprint零基础快速集成指南