LVGL库入门 01 - 样式

本文详细介绍了LVGL中的样式系统,包括样式变量、创建方法、尺寸与位置控制、边框、边距、轮廓、阴影、文本样式以及span-group的使用。LVGL借鉴了CSS的概念,允许对象动态改变外观,支持样式级联和继承。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、LVGL样式概述

Styles 用于设置对象的外观。 lvgl 中的样式很大程度上受到 CSS 的启发。

简而言之,其概念如下:

  • 样式是一个 lv_style_t 变量,它可以保存边框宽度、文本颜色等属性。它类似于 CSS 中的“类”。

  • 可以将样式分配给对象以更改其外观。在赋值过程中,可以指定目标部分(CSS 中的pseudo element)和目标状态(pseudo class)。例如,当滑块处于按下状态时,可以将“style_blue”添加到滑块的旋钮。

  • 任何数量的对象都可以使用相同的样式。

  • 样式可以级联,这意味着可以将多个样式分配给一个对象,并且每个样式可以具有不同的属性。因此,并非所有属性都必须在样式中指定。 LVLG 将寻找一个属性,直到一个样式定义它,或者如果它没有被任何样式指定,则使用默认值。例如,style_btn 可以导致默认的灰色按钮,而style_btn_red 只能添加一个background-color=red 来覆盖背景颜色。

  • 后来添加的样式具有更高的优先级。这意味着如果在两种样式中指定了一个属性,则将使用稍后添加的样式。

  • 如果对象中未指定某些属性(例如文本颜色),则可以从父级继承。

  • 对象可以具有比“正常”样式具有更高优先级的本地样式。

  • 与 CSS(伪类描述不同的状态,例如:focus)不同,在 LVGL 中,属性被分配给给定的状态。

  • 当对象改变状态时可以应用转换。

1、创建样式

在 LVGL 中,样式都是以对象的方式存在,一个对象可以描述一种样式。每个控件都可以独立添加样式,创建的样式之间互不影响。

可以使用 lv_style_t 类型创建一个样式并初始化:

static lv_style_t style;
lv_style_init(&style);

样式是延迟渲染的,因此需要使用 static 存储类别说明符或将其声明为全局变量。

样式是多方面的,不仅包括颜色和形状,还包括边距、边框,甚至动画变换效果等细节。

二、样式属性

1、尺寸和位置

要理解尺寸和位置是如何起作用的,首先要理解 LVGL 的盒子模型。官方文档给出了一张图,可以很好地描述一个控件的框架结构:

image

在设置尺寸的时候,长和宽指的是包括边框(border)厚度的长宽&

<think>好的,用户想要了解LVGL入门开发教程。我需要先回忆一下LVGL的基本信息,确保自己了解最新的版本和资源。首先,LVGL是一个轻量级的嵌入式GUI,适用于微控制器和嵌入式系统。用户可能是刚开始接触嵌入式GUI开发,或者想要将LVGL应用到他们的项目中。 用户的需求是入门教程,所以需要从基础开始,分步骤讲解。我需要考虑他们可能的开发环境,比如常用的硬件平台(如STM32、ESP32)、操作系统(是否使用FreeRTOS等)、以及LVGL的版本。目前最新的是v8.x或v9.x,需要确认文档是否有变化。 接下来,应该包括安装和配置LVGL的步骤,如何移植到目标硬件,以及编写第一个“Hello World”程序。还要提到模拟器的使用,这对没有硬件的用户来说很重要。另外,文档和社区资源是学习的关键,需要推荐官方文档和示例代码。 用户可能遇到的问题包括移植过程中的驱动配置、内存不足、或者显示异常。在教程中需要提醒常见问题及解决方法。此外,是否需要提到LVGL的图形工具,如SquareLine Studio?这对快速设计UI可能有帮助,但可能涉及第三方工具,需要说明。 需要确保回答结构清晰,分步骤,并且提供实际代码示例。同时,按照系统指令,所有行内数学表达式用$...$,独立公式用$$...$$,但LVGL教程可能较少涉及数学公式,所以这部分可能用不上。但需注意中英文标点,使用中文回答,避免Markdown格式。 最后,检查是否有遗漏的重要步骤,比如依赖的、如何配置显示和输入设备驱动、内存管理的最佳实践等。确保用户能够按照步骤顺利入门,并引导他们进一步学习的资源。</think>以下为LVGL入门开发的分步教程,采用结构清晰的工程化框架说明: 一、环境准备 1. 硬件选择 - 推荐MCU:Cortex-M4/M7级别及以上(主频≥100MHz) - 内存要求:≥64KB RAM(建议128KB+) - 显示屏:支持RGB、SPI或8080接口(240x320分辨率起步) 2. 开发工具链 - 编译器:GCC/ARMCC/IAR - 开发环境:VSCode+PlatformIO/Keil/STM32CubeIDE - 模拟器:LVGL官方PC模拟器(Windows/Linux/macOS通用) 二、工程搭建(以STM32为例) 1. 获取LVGL源码 ```bash git clone --branch v9.1.0 https://github.com/lvgl/lvgl.git ``` 2. 文件结构配置 ``` /my_project ├── Drivers/ # HAL驱动 ├── Core/ ├── LVGL/ # 官方源码 │ ├── src/ │ ├── examples/ │ └── ... ├── lv_conf.h # 配置文件模板 └── Src/main.c ``` 三、关键配置步骤 1. 修改lv_conf.h: ```c #define LV_MEM_SIZE (48U * 1024U) // 内存池配置 #define LV_HOR_RES_MAX 480 // 水平分辨率 #define LV_VER_RES_MAX 320 // 垂直分辨率 #define LV_USE_LOG 1 // 启用日志系统 ``` 2. 显示驱动实现(SPI接口示例): ```c void my_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { uint16_t w = area->x2 - area->x1 + 1; uint16_t h = area->y2 - area->y1 + 1; ILI9341_SetWindow(area->x1, area->y1, area->x2, area->y2); ILI9341_WritePixels((uint16_t*)color_p, w * h); lv_disp_flush_ready(disp_drv); } ``` 四、第一个GUI程序 ```c void lv_example_btn_1(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); lv_obj_add_event_cb(btn, btn_event_handler, LV_EVENT_CLICKED, NULL); } static void btn_event_handler(lv_event_t * e) { lv_obj_t * label = lv_label_create(lv_scr_act()); lv_label_set_text(label, "Hello LVGL!"); lv_obj_center(label); } ``` 五、最佳实践建议 1. 性能优化 - 启用双帧缓冲(需至少2*屏幕分辨率内存) - 使用LVGL的异步刷新机制 - 启用DMA2D加速(Cortex-M7/M33) 2. 内存管理 - 优先使用lv_mem_alloc()代替malloc() - 对象创建后必须设置parent参数 - 及时使用lv_obj_del()销毁不需要的对象 六、调试工具 1. 内置性能监控: ```c lv_mem_monitor_t mon; lv_mem_monitor(&mon); printf("Used: %d, Frag: %d%%\n", mon.used_pct, mon.frag_pct); ``` 2. 使用LittelvGL官方调试插件: - LV_USE_DEBUG 1 - 内存泄漏检测 - 对象树可视化 七、进阶学习路径 1. 官方资源: - 文档:https://docs.lvgl.io/8.1/ - 示例lvgl/demos目录 - 在线API参考:https://lvgl.100ask.net/9.1/ 2. 推荐学习顺序: 基础组件 → 动画系统 → 文件系统集成 → 多语言支持 → 自定义样式开发 → 硬件加速优化 常见问题解决方案: 1. 显示异常:检查lv_conf.h中的颜色深度设置(LV_COLOR_DEPTH) 2. 触控不响应:校准输入设备坐标系统 3. 内存不足:启用LV_MEM_CUSTOM配置自定义内存管理 建议从官方模拟器开始实验,逐步移植到真实硬件。通过LVGL的在线示例生成器(https://sim.lvgl.io/)可快速验证UI设计。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值