LVGL对象的盒子模型和样式

news2025/5/11 20:12:06

文章目录

      • 🧱 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.coloradmin.cn/o/2373392.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从0开始学习大模型--Day05--理解prompt工程

提示词工程原理 N-gram:通过统计,计算N个词共同出现的概率,从而预测下一个词是什么。 深度学习模型:有多层神经网络组成,可以自动从数据中学习特征,让模型通过不断地自我学习不断成长,直到模型…

计算机视觉——基于树莓派的YOLO11模型优化与实时目标检测、跟踪及计数的实践

概述 设想一下,你在多地拥有多个仓库,要同时监控每个仓库的实时状况,这对于时间和精力而言,都构成了一项艰巨挑战。从成本和可靠性的层面考量,大规模部署计算设备也并非可行之策。一方面,大量计算设备的购…

【计算机视觉】OpenCV项目实战:OpenCV_Position 项目深度解析:相机定位技术

OpenCV_Position 项目深度解析:基于 OpenCV 的相机定位技术 一、项目概述二、技术原理(一)单应性矩阵(Homography)(二)算法步骤(三)相机内参矩阵 三、项目实战运行&#…

LAMMPS分子动力学基于周期扰动法的黏度计算

关键词:黏度,周期扰动法,SPC/E水分子,分子动力学,lammps 目前分子动力学计算黏度主要有以下方法:(1)基于 Green - Kubo 关系的方法。从微观角度出发,利用压力张量自相关函数积分计算…

unity通过transform找子物体只能找子级

unity通过transform找子物体只能找子级,孙级以及更低级别都找不到,只能找到自己的下一级 如果要获取孙级以下的物体,最快的方法还是直接public挂载

ThinkPad T440P如何从U盘安装Ubuntu24.04系统

首先制作一个安装 U 盘。我使用的工具是 Rufus ,它的官网是 rufus.ie ,去下载最新版就可以了。直接打开这个工具,选择自己从ubuntu官网下载Get Ubuntu | Download | Ubuntu的iso镜像制作U盘安装包即可。 其次安装之前,还要对 Thi…

嵌入式开发学习(阶段二 C语言基础)

C语言:第05天笔记 内容提要 分支结构 条件判断用if语句实现分支结构用switch语句实现分支结构 分支结构 条件判断 条件判断:根据某个条件成立与否,决定是否执行指定的操作。 条件判断的结果是逻辑值,也就是布尔类型值&#…

从人体姿态到机械臂轨迹:基于深度学习的Kinova远程操控系统架构解析

在工业自动化、医疗辅助、灾难救援与太空探索等前沿领域,Kinova轻型机械臂凭借7自由度关节设计和出色负载能力脱颖而出。它能精准完成物体抓取、复杂装配和精细操作等任务。然而,实现人类操作者对Kinova机械臂的直观高效远程控制一直是技术难题。传统远程…

NX949NX952美光科技闪存NX961NX964

NX949NX952美光科技闪存NX961NX964 在半导体存储领域,美光科技始终扮演着技术引领者的角色。其NX系列闪存产品线凭借卓越的性能与创新设计,成为数据中心、人工智能、高端消费电子等场景的核心组件。本文将围绕NX949、NX952、NX961及NX964四款代表性产品…

【Bootstrap V4系列】学习入门教程之 组件-输入组(Input group)

Bootstrap V4系列 学习入门教程之 组件-输入组(Input group) 输入组(Input group)Basic example一、Wrapping 包装二、Sizing 尺寸三、Multiple addons 多个插件四、Button addons 按钮插件五、Buttons with dropdowns 带下拉按钮…

VS “筛选器/文件夹”

每天学习一个VS小技巧: 我在VS创建筛选器的时候,想要想要同步计算机上的文件目录,但是发现并未 同步。 例如我在这儿创建了一个筛选器IoManager 但是在UI这个文件夹里并未创建对应的IoManager文件夹 我右击也没有打开文件所在位置 然后我…

powerbuilder9.0中文版

经常 用这个版本号写小软件,非常喜欢这个开发软件 . powerbuilder9.0 非常的小巧,快捷,功能强大,使用方便. 我今天用软件 自己汉化了一遍,一些常用的界面都已经翻译成中文。 我自己用的,以后有什么界面需要翻译,再更新一下。 放在这里留个…

基于C语言的TCP通信测试程序开发指南

一、TCP通信基础原理 1.1 通信流程概述 TCP通信采用客户端-服务器模型,核心流程如下: 服务器端: 创建套接字(Socket) 绑定地址和端口(Bind) 开始监听(Listen) 接受…

教育系统源码如何支持白板直播与刷题功能?功能开发与优化探索

很多行业内同学疑问,如何在教育系统源码中支持白板直播和刷题功能?本篇文章,小编将从功能设计、技术实现到性能优化,带你全面了解这个过程。 一、白板直播功能的核心需求与技术挑战 实时交互与同步性 白板直播的核心是“实时性”。…

再度深入理解PLC的输入输出接线

本文再次重新梳理: 两线式/三线式传感器的原理及接线、PLC的输入和输出接线,深入其内部原理,按照自己熟悉的方式去理解该知识 在此之前,需要先统一几个基础知识点: 在看任何电路的时候,需要有高低电压差&…

k8s(11) — 探针和钩子

钩子和探针的区别: 在 Kubernetes(k8s)中,钩子(Hooks)和探针(Probes)是保障应用稳定运行的重要机制,不过它们的用途和工作方式存在差异,以下为你详细介绍&…

使用jmeter对数据库进行压力测试

🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 前言 很多人提到 jmeter时,只会说到jmeter进行接口自动化或接口性能测试,其实jmeter还能对数据库进行自动化操作。个人常用的场景有以下&…

Kubernetes生产实战(十四):Secret高级使用模式与安全实践指南

一、Secret核心类型解析 类型使用场景自动管理机制典型字段Opaque (默认)自定义敏感数据需手动创建data字段存储键值对kubernetes.io/dockerconfigjson私有镜像仓库认证kubelet自动更新.dockerconfigjsonkubernetes.io/tlsTLS证书管理Cert-Manager可自动化tls.crt/tls.keykube…

05 mysql之DDL

一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下,新能源汽车产业异军突起,成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统,其热管理技术的优劣,直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…