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

LVGL对象的盒子模型和样式

文章目录

      • 🧱 LVGL 对象盒子模型结构
      • 🔍 组成部分说明
      • 🎮 示例代码
      • 📌 总结一句话
    • 🧱 一、样式的本质:`lv_style_t` 对象
    • 🎨 二、样式应用的方式
    • 🧩 三、样式属性分类(核心)
    • 🪄 四、多个样式如何合成?
    • 🧪 五、简易例子
    • ✅ 总结一句话


在 LVGL(Light and Versatile Graphics Library)中,对象的**盒子模型(Box Model)**类似于 Web/CSS 的布局思想,用于描述对象的结构、边距、填充等空间关系。下面是简明清晰的讲解:


🧱 LVGL 对象盒子模型结构

+-------------------------------+ ← 外部对象区域
|         Margin                |
|   +-----------------------+   |
|   |      Border           |   |
|   |   +---------------+   |   |
|   |   |   Padding     |   |   |
|   |   | +----------+  |   |   |
|   |   | |  Content |  |   |   |
|   |   | +----------+  |   |   |
|   |   +---------------+   |   |
|   +-----------------------+   |
+-------------------------------+

🔍 组成部分说明

区域描述
Content对象真正显示的内容(文字、图像等)
Padding内容与边框之间的内边距,设置方式如 lv_obj_set_style_pad_all()
Border对象的边框,样式设置如 lv_obj_set_style_border_width()
Margin对象与其他对象之间的外边距,仅在使用布局时起作用

🎮 示例代码

lv_obj_t *btn = lv_btn_create(lv_scr_act());
lv_obj_set_style_pad_all(btn, 10, 0);       // 设置 padding
lv_obj_set_style_border_width(btn, 2, 0);   // 设置 border
lv_obj_set_style_margin_all(btn, 5, 0);     // 设置 margin

📌 总结一句话

LVGL 的盒子模型由 margin、border、padding 和 content 组成,控制对象与周围及自身内容的布局关系。

在 LVGL 中,样式(Style)系统是实现美观界面和灵活定制的核心机制之一。它允许开发者控制对象的颜色、大小、圆角、边框、阴影、透明度、字体等属性。下面我们分层次讲清楚:


🧱 一、样式的本质:lv_style_t 对象

LVGL 用 lv_style_t 结构体来描述样式,例如:

static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_color_hex(0xff0000));  // 设置背景色为红色

一个 style 就是一组视觉属性集合,不属于某个特定对象,可以多个对象复用。


🎨 二、样式应用的方式

样式不是自动生效的,必须绑定到对象上才能生效:

lv_obj_add_style(obj, &style, LV_PART_MAIN);

其中:

  • obj 是目标对象;
  • &style 是样式指针;
  • LV_PART_MAIN 是应用到哪个部件(part),对象可能有多个部分,如主区域、指示器、滑块等。

🧩 三、样式属性分类(核心)

属性类别典型属性(函数)说明
背景lv_style_set_bg_color()背景颜色
边框lv_style_set_border_width()边框宽度
内边距lv_style_set_pad_all()padding
阴影lv_style_set_shadow_width()阴影大小
字体/文本lv_style_set_text_font()字体
圆角lv_style_set_radius()圆角半径
不透明度lv_style_set_bg_opa()背景透明度

🪄 四、多个样式如何合成?

LVGL 样式系统支持多个样式叠加:

  1. 优先级排序(重要!):

    • 本地样式(lv_obj_add_style() 加的) > 主题样式 > 默认样式;
  2. 相同属性时,后添加的会覆盖先添加的;

  3. 不同属性时会叠加。


🧪 五、简易例子

lv_obj_t *label = lv_label_create(lv_scr_act());
lv_label_set_text(label, "Hello LVGL!");// 创建样式
static lv_style_t style;
lv_style_init(&style);
lv_style_set_text_color(&style, lv_color_hex(0x0000FF));  // 蓝色字体
lv_style_set_text_font(&style, &lv_font_montserrat_20);   // 大字体// 应用样式
lv_obj_add_style(label, &style, LV_PART_MAIN);

✅ 总结一句话

LVGL 的样式系统通过 lv_style_t 控制对象视觉属性,支持叠加、复用和局部应用,功能类似于 CSS。

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

相关文章:

  • Arduino 开源按键库大合集(单击/双击/长按实现)
  • VB与Excel无缝连接实现指南
  • 编译后的js文件如何跟进调试
  • OpenAI的商业化之路:从非营利到盈利的转型
  • IC ATE集成电路测试学习——开尔文连接
  • 最速下降法和梯度下降法的异同
  • python基础(十一)-逻辑运算符
  • nextjs 部署失败:cause: Error: unable to verify the first certificate
  • C语言加餐--一些关键字
  • 数字信号处理|| 离散系统的冲激响应和阶跃响应
  • 【Python训练营打卡】day21 @浙大疏锦行
  • 101alpha第九
  • 一、ArkTS语法学习
  • Qt 界面优化(QSS)
  • 【数据结构与算法】——图(二)
  • 《AI大模型应知应会100篇》第54篇:国产大模型API对比与使用指南
  • 【Redis】基础命令数据结构
  • Spring框架核心知识全解析:从基础到实战
  • [面试]SoC验证工程师面试常见问题(六)高速接口篇
  • 含锡电镀废水深度净化技术体系解析化利用的全流程优化
  • pytest自动化测试执行环境切换的两种解决方案
  • 树莓派OS系统详解
  • 动态规划法:爬楼梯
  • C++模板梳理
  • JAVA练习题(3) 开发验证码
  • 如何避免软件腐朽
  • jflash下载时出现 Could not read unit serial number! 的解决方法
  • 数据结构—(概述)
  • 【typenum】 1 说明文件(README.md)
  • 【AI论文】迈向多模态通才之路:通用层级与通用基准