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

LVGL库入门 01 - 样式

一、LVGL样式概述

1、创建样式

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

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

static lv_style_t style;
lv_style_init(&style);

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

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

二、样式属性

1、尺寸和位置

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

image

在设置尺寸的时候,长和宽指的是包括边框(border)厚度的长宽,也就是不包括轮廓(outline)的总长宽。

在设置位置的时候,设置的坐标指的是 border 左上角相对父容器的 Content area 的坐标,也就是说如果设置坐标为 0 的话,轮廓(outline)可能会被父容器的边框(border)遮盖。

下表总结了尺寸与位置有关的可用属性有:

属性描述默认值
width宽度由控件类别决定
min_width最小宽度0
max_width最大宽度屏幕的宽度
height高度由控件类别决定
min_height最小宽度0
max_height最大宽度屏幕的高度
align对齐方式左上方
x对齐后在水平方向的偏移量0
y对齐后在竖直方向的偏移量0

注意这里有一个最小或最大的宽度和高度,可以给它们提供一个阈值防止过大或过小。

在设置宽度和高度时,除了使用确定的数值外,还可以使用百分比值 lv_pct(x) 来设置控件相对父容器的 Content area 的大小或位置。例如,样式

lv_style_set_width(&style, lv_pct(25));
lv_style_set_x(&style, lv_pct(50));

可以让一个控件的水平尺寸占据父容器的 1/2~3/4 的位置:

image

对于父容器而言,还可以使用 LV_SIZE_CONTENT 特殊单位调整其尺寸至可以容纳所有包含控件的合适值。例如,按钮就是一个这样的容器,它的默认样式就通过该值使得其宽度和高度可以自动适应包含的标签尺寸。

2、边框和边距

上图展示的文本框就有一个深灰色的边框。边框就无需额外描述了,与边框有关的样式属性有:

属性描述默认值
border_width边框宽度,只能用绝对宽度描述0
border_side绘制哪些部分的边框LV_SIDE_ALL
border_post绘制顺序,设置 true 表示包含的子控件绘制完成了再绘制边框false
...与颜色有关的属性将在之后介绍

边框和主体部分之间被边距(padding)隔开。和边距有关的样式属性有:

属性描述默认值
pad_top上边距0
pad_bottom下边距0
pad_left左边距0
pad_right右边距0
pad_row当控件拥有布局时,每行间的间距0
pad_column当控件拥有布局时,每列间的间距0

不过在设置布局时,还提供了几个简写属性:可以使用 ...pad_all() 一并设置上下左右的边距;或使用 ...pad_hor() 和 ...pad_ver() 设置水平和垂直的边距;还可以使用 ...pad_gap() 设置行和列的间距。

3、轮廓

轮廓(outline)类似边框,但轮廓并不算在一个控件的主体内,因此设置坐标、尺寸等属性时都不包含轮廓的尺寸。

轮廓可设置的属性远比边框少。下表列出了轮廓的一些属性:

属性描述默认值
outline_width轮廓宽度0
outline_pad轮廓到主体的间距0
...与颜色有关的属性将在之后介绍

轮廓和边框最根本的差异是两者不是同一个东西,因此可以在同一个元素同时使用不同样式的轮廓的边框来实现一些有趣的效果。

4、阴影

阴影可以使控件看起来有立体感。下表列出了设置阴影的一些属性:

属性描述默认值
shadow_width设置阴影的模糊半径0
shadow_ofs_x设置阴影的水平偏移量0
shadow_ofs_y设置阴影的垂直偏移量0
shadow_spread设置阴影的放大量0
...与颜色有关的属性将在之后介绍

例如,以下设置模糊半径为 50 的蓝色阴影:

LVGL 中无法给同一个控件设置多个阴影叠加,从而实现更复杂的效果,这是比较可惜的一点。

5、文本样式

在创建控件时经常要使用文字,下表列出了能影响文字效果的一些属性:

属性描述默认值
text_font设置文字的字体默认字体
text_letter_space字符间隔0
text_line_space设置多行文本的行间距0
text_decor设置文本装饰(下划线或删除线)LV_TEXT_DECOR_NONE
text_align设置文本对齐方式LV_TEXT_ALIGN_AUTO
...与颜色有关的属性将在之后介绍

需要注意的是,文本的样式是可继承的,意思是如果子控件没有特别指定的话,它会使用父容器设置的文本样式。

在一段文本内可能存在许多种样式,对此,可以使用类似 CSS 的 span 来拆分样式在文本内的作用域。

span-group 提供的以下函数顶用它对比浮签更符合用于拍卖大段的文件:

函数介绍
lv_spangroup_set_align(obj, align)

设置文本框中文本的对齐方式,可以设置为左对齐、居中对齐或右对齐

lv_spangroup_set_overflow(obj, overflow)设置文本框中文本的溢出处理方式,可以设置为自动换行、截断或滚动
lv_spangroup_set_indent(obj, indent)设置文本框中文本的缩进,可以设置为左缩进、右缩进或无缩进
lv_spangroup_set_mode(obj, mode)设置文本框中文本的换行模式,可以设置为自动换行或不换行,不换行时是将文本框的宽度调整为文本的宽度

一个 span-group 可以创建多个 span ,并且它们的样式效果互不影响:

lv_obj_t* spangroup = lv_spangroup_create(lv_scr_act());
lv_obj_set_size(spangroup, 160, LV_SIZE_CONTENT);lv_span_t* span = lv_spangroup_new_span(spangroup);
lv_span_set_text(span, "LVGL is an open-source graphics library");
lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_BLUE));span = lv_spangroup_new_span(spangroup);
lv_span_set_text(span, "providing everything");
lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_UNDERLINE);
lv_style_set_text_font(&span->style, &lv_font_montserrat_20);/* ... */span = lv_spangroup_new_span(spangroup);
lv_span_set_text(span, "to create embedded GUI");

效果为:

image

可以注意到默认的 span-group 是没什么样式的。

6、其它样式

下表列出了一些其它的样式属性:

属性描述默认值
radius设置控件的圆角,该属性会一并影响边框和轮廓0,即无圆角
clip_corner如果有圆角,是否要将 Content-aera 超出圆角的部分去除
layout设置控件的布局方式0
base_dir设置文字的书写方向,它会同时影响布局的方向默认书写方向
...与颜色有关的属性将在之后介绍

在设置半径时可以使用百分数,例如 lv_pct(50) 将使控件变成圆形。

三、参考资料:

Styles — LVGL documentation

官方文档——样式简介

Style properties — LVGL documentation

官方文档——所有的样式属性简介

相关文章:

LVGL库入门 01 - 样式

一、LVGL样式概述 1、创建样式 在 LVGL 中,样式都是以对象的方式存在,一个对象可以描述一种样式。每个控件都可以独立添加样式,创建的样式之间互不影响。 可以使用 lv_style_t 类型创建一个样式并初始化: static lv_style_t s…...

酷克数据出席永洪科技用户大会 携手驱动商业智能升级

10月27日,第7届永洪科技全国用户大会在北京召开。酷克数据作为国内云原生数仓代表企业,受邀出席本次大会,全面展示了云数仓领域最新前沿技术,并进行主题演讲。 携手合作 助力企业释放数据价值 数据仓库是商业智能(BI…...

英语教育目标转变:更加注重实际应用能力培养

今年九月份,北京市教委发布了《关于深入推进高中阶段学校考试招生改革的实施意见》。按照该意见,北京市2024年初三年级学生的初中学业水平考试英语科目听力口语考试与笔试将分离,首次计算机考试将于2023年12月17日进行。 根据《意见》规定,听力口语计算机考试共有两次考试机会…...

Java中的继承和多态

目录 1. 继承 1.1 为什么需要继承 1.2 继承概念 1.3 继承的语法 1.4 父类成员访问 1.4.1 子类中访问父类的成员变量 1.4.2 子类中访问父类的成员方法 1.5 super关键字 1.6 子类构造方法 1.7 super和this 1.8 再谈初始化 1.9 protected 关键字 1.10 继承方式…...

海外问卷调查现在还可以做吗?

可以做,海外问卷调查是一个稳定长期的互联网创业项目。 大家好,我是橙河,这篇文章讲一讲海外问卷调查现在还可以做吗? 海外问卷调查,简单来说,就是外国的商业公司对外发放的付费调查问卷,按照…...

CA证书与服务器证书

服务器证书和CA证书是网络通信中使用的两种重要的证书。服务器证书是用于验证服务器身份的证书,而CA证书是用于验证证书颁发机构(Certificate Authority)身份的证书。 服务器证书是由网站服务器申请并由CA机构颁发的。它包含了服务器的公钥和其他相关信息&#xff…...

AI智能语音识别模块(二)——基于Arduino的语音控制MP3播放器

文章目录 简介离线语音控制模块Mini MP3模块0.96寸 OLED模块实验准备安装库接线定义主要程序实验效果注意事项总结 简介 在前面一篇文章里我们对AI智能语音识别模块进行了介绍,并对离线语音模组下载固件的过程进行了一个简单描述,不知道大家还记不记得&…...

CentOS部署Minikube

基本介绍 Minikube是本地的Kubernetes,专注于使其易于为Kubernete学习和开发。 官方地址:https://minikube.sigs.k8s.io/docs/start/ 部署安装 # CentOS 7.6# 前置条件:安装好Docker或其他容器引擎或虚拟机 参见《CentOS一键部署Docker》…...

第5章_排序与分页

文章目录 1 排序数据1.1 排序规则1.2 单列排序1.3 多列排序排序演示代码 2 分页2.1 背景2.2 实现规则2.3 拓展分页演示代码 3 课后练习 1 排序数据 1.1 排序规则 使用 ORDER BY 子句排序 ASC(ascend): 升序DESC(descend):降序 …...

Elasticsearch实战:常见错误及详细解决方案

Elasticsearch实战:常见错误及详细解决方案 1.read_only_allow_delete":“true” 当我们在向某个索引添加一条数据的时候,可能(极少情况)会碰到下面的报错: {"error": {"root_cause": [{&…...

C#添加缓存,删除缓存,修改缓存

在C#中,可以使用内置的缓存功能或者使用第三方缓存库来管理缓存。下面分别介绍使用内置缓存功能和使用第三方缓存库的方法。 使用内置缓存功能: 添加缓存: 在C#中,可以使用MemoryCache类来添加缓存。以下是一个简单的示例&…...

PADS Router的操作页面及鼠标指令介绍

PADS Router的用户界面由菜单栏,工作界面,一般工具栏,状态栏,项目浏览器组,输出窗口,电子表格组成(图1): 图1 注意:如果你的界面没有显示项目浏览器&#xff…...

Android studio进入手机调试状态

首先usb插入电脑手机打开开发者模式进入点击就会在你的页面显示了...

《Pytorch新手入门》第二节-动手搭建神经网络

《Pytorch新手入门》第二节-动手搭建神经网络 一、神经网络介绍二、使用torch.nn搭建神经网络2.1 定义网络2.2 torch.autograd.Variable2.3 损失函数与反向传播2.4 优化器torch.optim 三、实战-实现图像分类(CIFAR-10数据集)3.1 CIFAR-10数据集加载与预处理3.2 定义网络结构3.3…...

C++ 模板学习笔记

C另外一种编程成为 泛型编程 ,主要利用的技术就是模板 C提供两种模板机制:函数模板和类模板 C11中,函数模板和类模板都可以设定默认参数,传送门 函数模板 一般 typename 和 class 没有区别,typename 还有个作用是使…...

1、Flink基础概念

1、基础知识 (1)、数据流上的有状态计算 (2)、框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。 (3)、事件驱动型应用,有数据流就进行处理,无数据流就不…...

分享一下怎么做小程序营销活动

小程序营销活动已经成为现代营销的必备利器,它能够帮助企业提高品牌知名度、促进产品销售,以及加强与用户的互动。然而,要想成功地策划和执行一个小程序营销活动,需要精心设计和全面规划。本文将为您介绍小程序营销活动的策划和执…...

Laravel 后台管理 Dcat Admin 使用记录

Laravel Dcat Admin 安装配置修改配置表格操作 Ajax 结合 Pjax 更新数据状态表格 链接表单设置页面(通常修改更新在同一页面)表单 安装配置 安装文档地址 框架版本 Laravel 8.* 修改配置 修改 admin.php 文件 return [// 后台名称name > DAD后台管理,// 标题title > 后台…...

c语言基础:L1-070 吃火锅

以上图片来自微信朋友圈:这种天气你有什么破事打电话给我基本没用。但是如果你说“吃火锅”,那就厉害了,我们的故事就开始了。 本题要求你实现一个程序,自动检查你朋友给你发来的信息里有没有 chi1 huo3 guo1。 输入格式&#x…...

java spring boot 注解、接口和问题解决方法(持续更新)

注解 RestController 是SpringMVC框架中的一个注解,它结合了Controller和ResponseBody两个注解的功能,用于标记一个类或者方法,表示该类或方法用于处理HTTP请求,并将响应的结果直接返回给客户端,而不需要进行视图渲染…...

Linux-安装cmatrix

linux-安装cmatrix (黑客帝国矩阵效果) su root #切换身份到root不受权限控制 cd /usr/src #进入源码下载位置,准备下载安装包利用xftp 共享传送文件进入home找到文件,cp 文件 /usr/src解压,进…...

LangGraph多智能体工作流:从线性执行到网状协作的重构

LangGraph多智能体工作流:从线性执行到网状协作的重构 1. 标题 (Title) 为了精准覆盖核心关键词、吸引不同层次的读者(AI应用开发者、LangChain进阶学习者、多智能体系统架构师),我准备了以下4个差异化标题: 《LangGraph 重塑AI协作:告别LangChain AgentExecutor的“单线…...

AI Agent如何重构咨询交付模式:从人工周级报告到秒级洞察,头部咨询公司内部流程解密

更多请点击: https://intelliparadigm.com 第一章:AI Agent如何重构咨询交付模式:从人工周级报告到秒级洞察,头部咨询公司内部流程解密 传统管理咨询项目中,一线顾问需耗时5–7天完成行业扫描、竞对分析、客户数据清洗…...

2026论文写作工具红黑榜:AI论文网站怎么选?清单来了

2026年论文写作工具竞争白热化,红榜优先选千笔AI、ThouPen、豆包,适配国内学术规范,内容严谨且格式合规;黑榜需避开低质免费工具、无真实引用平台、过度依赖全文生成的工具。选择时可按需求匹配度 - 数据可信度 - 成本承受力三维模…...

鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解

鸿蒙今日穿搭页面构建:衣橱库存、今日配色与场景建议模块详解 前言 在 HarmonyOS 6.0 应用开发中,穿搭类页面的衣橱管理、配色方案和场景化建议是提升用户实用性的关键功能模块。本文将以“今日穿搭”应用中的“衣橱库存”进度条模块、“今日配色”色彩盘…...

工业AI落地:从数据冷启动到高质数据工程实战

1. 为什么“数据为中心”不是口号,而是工程现场的真实压力去年冬天,我帮一家做工业缺陷检测的初创公司做模型交付。他们拿来的数据集只有237张标注图,全是产线停机时人工拍的——光照不均、角度单一、连螺丝孔都只拍正面。当时团队信心满满&a…...

AssetStudio深度解析:Unity序列化协议与产线级资源解包实战

1. 这不是“又一个AssetStudio教程”,而是我用它救回三个项目的真实记录AssetStudio、Unity资源提取、AssetBundle解包——这几个词,对做过Unity客户端开发、逆向分析、MOD制作或老游戏复刻的人来说,不是工具名,是救命稻草。我第一…...

Rust 环境搭建指南

Rust 环境搭建指南 引言 Rust 是一种系统编程语言,以其高性能、内存安全和并发特性而闻名。在本文中,我们将详细讲解如何搭建 Rust 开发环境,包括安装 Rust 语言、配置编辑器以及使用 Rust 包管理器 Cargo。 安装 Rust 系统要求 在开始之前,请确保您的计算机满足以下系…...

【Android】针灸大师-穴位解剖精准经络系统-医学生必备-会员版

【Android】针灸大师-穴位解剖精准经络系统-医学生必备-会员版 链接:https://pan.xunlei.com/s/VOtJd241jF6B-cTY3Gs64aacA1?pwdeynm# 针灸大师(Acupuncture master)将经络穴位与人体精细解剖相结合,是交互式学习十二经脉,奇经八脉,经络系统…...

二刷hot100-101.对称二叉树

递归写法;终止条件有很多,左右节点都为空,返回true;有一方为空或者值不相等,返回false;如果都不满足,进入下一层递归:左的左和右的右比较,左的右和右的左比较&#xff1b…...