LVGL 控件之标签(lv_label)

news2024/9/22 4:11:42

目录

  • 一、概述
  • 二、标签
    • 1、设置文本
    • 2、长模式
    • 3、文本着色
    • 4、文本选择
    • 5、内置图标
    • 6、事件
    • 7、API 函数


一、概述

标签部件由三个部分组成:主体背景、滚动条和所选文本:

  • LV_PART_MAIN(主体背景)使用所有典型的背景属性和文本属性。 填充值可用于在文本和背景之间添加空间。
  • LV_PART_SCROLLBAR(滚动条)当文本大于组件的大小时显示的滚动条。
  • LV_PART_SELECTED(所选文本)告诉 selected text 的样式。 只能使用 text_color 和 bg_color 样式属性。

下面是一个简单的标签示例:

lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
lv_label_set_text(lv_label1, "Hello World");
lv_obj_center(lv_label1);

二、标签

1、设置文本

设置标签部件文本的方法有三种:

  1. 调用 lv_label_set_text 函数

该函数是最常用的标签文本设置函数,它存储文本的内存由动态内存分配的。

  1. 调用 lv_label_set_text_fmt 函数

该函数与 C 语言的 sprintf 输出函数类似,都可以设置“式样化字符串”和“参数表”,示例代码如下:

lv_label_set_text_fmt(label, "Value: %d", 15);

  1. 调用 label_set_text_static 函数

该函数可以设置静态文本,该文本不存储在动态内存中,而是直接使用指定的缓冲区,此时,如果使用数组设置文本,则该数组不能是局部变量。

char *buf = "hello";

void my_gui(void)
{
    lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
    lv_label_set_text_static(lv_label1, buf);
    lv_obj_center(lv_label1);
}

在这里插入图片描述

当然也可用 ‘\n`’ 来进行换行:

lv_label_set_text(lv_label1, "Hello\nWorld\n!");

2、长模式

默认情况下,标签部件的宽度和高度都会根据文本的大小来动态变化。如果用户固定了标签部件的大小,并且文本的长度超过了部件的长度,则可以使用以下几个长文本模式来选择文本展现的形式:

  1. LV_LABEL_LONG_WRAP(默认):如果标签部件的高度是 LV_SIZE_CONTENT,则该部件高度将被扩展,否则文本将被剪切。
  2. LV_LABEL_LONG_DOT:将标签文本右下角的最后 3 个字符替换为点。
  3. LV_LABEL_LONG_SCROLL:来回滚动。如果文本比标签部件宽,则往水平方向滚动。如果文本比标签部件高,则往垂直方向滚动。注意:文本只会往一个方向滚动,水平方向具有更高的优先级。
  4. LV_LABEL_LONG_SCROLL_CIRCULAR:循环滚动。如果文本比标签部件宽,则往水平方向滚动。如果文本比标签部件高,则往垂直方向滚动。注意:文本只会往一个方向滚动,水平方向具有更高的优先级。
  5. LV_LABEL_LONG_CLIP:直接裁剪标签部件外面的文本。

用户可以使用 lv_label_set_long_mode(label, LV_LABEL_LONG_...) 指定长模式。

示例:

lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
lv_label_set_text(lv_label1, "Hello World dfadf dsfadsaf dsfadsf !");
lv_label_set_long_mode(lv_label1, LV_LABEL_LONG_SCROLL_CIRCULAR);
lv_obj_set_content_width(lv_label1, 100);
lv_obj_center(lv_label1);

重要的是要注意,当创建标签并设置其文本时,标签的大小已扩展为文本大小。除了默认的 LV_LABEL_LONG_EXPAND ,长模式 lv_obj_set_width/height/size() 无效。

因此,需要更改长模式,首先设置新的长模式,然后使用 lv_obj_set_width/height/size() 设置大小。

另一个重要的注意事项是 LV_LABEL_LONG_DOT 在原地操纵文本缓冲区,以便添加/删除点。当使用 lv_label_set_textlv_label_set_array_text 时,将分配一个单独的缓冲区,并且该实现细节不会被注意。lv_label_set_static_text 并非如此!如果打算使用 LV_LABEL_LONG_DOT ,则传递给 lv_label_set_static_text 的缓冲区必须可写。

3、文本着色

用户需要让标签文本着色,可以调用 lv_label_set_recolor 函数。

lv_obj_t* lv_label1 = lv_label_create(lv_scr_act());
lv_label_set_text(lv_label1, "Hello #ff0000 World#!");
lv_label_set_recolor(lv_label1,true);
lv_obj_center(lv_label1);

注意:用户需要设置标签文本着色,必须按以下格式设置文本:#颜色 文本#

也可以通过样式改色:

lv_label_set_text(lv_label1, "Hello World!");
lv_obj_set_style_text_color(lv_label1, lv_color_hex(0xff0000), 0);

4、文本选择

如果在 lv_conf.h 中打开了 LV_LABEL_TEXT_SELECTION (默认开启),就可以选择部分文本了。这个和我们在 PC 用鼠标选中文本类似,但是这个效果只能在文本框 (lv_textarea) 中实现。Label 只能事先手动选择指定范围的文本

lv_label_get_text_selection_start(label, start_char_index);
lv_label_get_text_selection_start(label, end_char_index);

5、内置图标

  1. 直接显示图标
lv_label_set_text(lv_label1, LV_SYMBOL_OK);

在这里插入图片描述

  1. 与字符串一起使用
lv_label_set_text(lv_label1, LV_SYMBOL_OK "Apply");

  1. 许多个图标一起
lv_label_set_text(lv_label1, LV_SYMBOL_OK LV_SYMBOL_WIFI LV_SYMBOL_PLAY);

6、事件

Label 默认不接收输入事件,如果我们想设置输入类型的样式或者事件会无法生效,就需要打开 LV_OBJ_FLAG_CLICKABLE

lv_obj_add_flag(label, LV_OBJ_FLAG_CLICKABLE);
lv_obj_add_event_cb(label, function, LV_EVENT_ALL, 0);

7、API 函数

函数描述
lv_label_create()创建标签对象
lv_label_set_text()设置标签的新文本
lv_label_set_text_fmt()设置标签的新格式的文本
lv_label_set_text_static()设置一个静态文本
lv_label_set_long_mode()使用更长的文本然后设置对象大小来设置标签
lv_label_set_recolor()启用重新着色
lv_label_set_text_sel_start()设置选择开始索引
lv_label_set_text_sel_end()设置选择结束索引
lv_label_get_text()获取标签文本
lv_label_get_long_mode()获取标签的长模式
lv_label_get_recolor()获取重新着色属性
lv_label_get_letter_pos()获取字母的相对 x 和 y 坐标
lv_label_get_letter_on()获取标签相对点上的字母索引
lv_label_is_char_under_pos()检查是否在一个点下绘制了一个字符
lv_label_get_text_selection_start()获取选择开始索引
lv_label_get_text_selection_end()获取选择结束索引
lv_label_ins_text()在标签上插入文本。标签文本不能是静态的
lv_label_cut_text()从标签中删除字符。标签文本不能是静态的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120560.html

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

相关文章

windows手工杀毒-寻找可疑进程之网络连接

上篇回顾:windows手工杀毒-寻找可疑进程之句柄 上篇我们简单介绍了如何通过句柄发现可疑进程,主要有两个方向,一个是通过命名句柄的名称,利用全局唯一的句柄名反向标识进程,另一个就是通过句柄查看进程占有的资…

二、线性结构及算法

文章目录 一、稀疏数组1.1 实际需求1.2 基本介绍1.3 应用实例 二、队列2.1 引入2.2 基本介绍2.3 数组模拟队列 三、链表3.1 链表介绍3.2 单链表的应用实例3.3 单链表面试题3.4 双向链表应用实例3.5 单向环形链表 四、栈4.1 基本介绍4.2 数组模拟栈4.3 链表模拟栈4.4 栈实现综合…

PMP--一、二、三模--分类--14.敏捷--技巧--宣言

文章目录 技巧一模14.敏捷--宣言--重视实在的--工作的软件大于流程和文档19、 [单选] 一个关键干系人坚持团队用正式的文档广泛地记录软件代码。产品负责人解释说,虽然一定数量的文档是必要的,但团队成员最好把时间花在开发软件上,因为这对客…

Java 每日一刊(第2期):搭建开发环境

文章目录 JVM、JRE、JDKJVM(Java Virtual Machine,Java 虚拟机)JRE(Java Runtime Environment,Java 运行时环境)JDK(Java Development Kit,Java 开发工具包)JVM、JRE、JD…

1765asp.net古镇旅游网站VS开发sqlserver数据库web结构c#编程web网页设计

博主介绍:专注于Java .net php phython 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作 ☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟 我的博客空间发布了1000毕设题目 方便大家学习使用 感兴趣的可以…

Python | Leetcode Python题解之第395题至少有K个重复字符的最长子串

题目: 题解: class Solution:def longestSubstring(self, s1: str, k: int) -> int:if k 1: return len(s1)n len(s1)res 0for c in range(1, len(set(s1)) 1):# 滑窗中字母种类个数恰好为 cfreq Counter()l cnt tcnt 0 for r, ch in enu…

安防监控/视频汇聚平台EasyCVR无法启动并报错“error while loading shared libraries”,如何解决?

安防监控/视频汇聚平台EasyCVR视频管理系统以其强大的拓展性、灵活的部署方式、高性能的视频能力和智能化的分析能力,为各行各业的视频监控需求提供了优秀的解决方案。通过简单的配置和操作,用户可以轻松地进行远程视频监控、存储和查看,满足…

AI基础 L10 Adversarial Search I 对抗性搜索

Multiagent Environments In multiagent environments, each agent must: — Consider everyone else’s actions — Coordinate in order to act coherently 多个智能体(agent)相互作用,每个智能体都具有自己的目标和行动策略。在多智能体环…

C++ | Leetcode C++题解之第396题旋转图像

题目&#xff1a; 题解&#xff1a; class Solution { public:int maxRotateFunction(vector<int>& nums) {int f 0, n nums.size();int numSum accumulate(nums.begin(), nums.end(), 0);for (int i 0; i < n; i) {f i * nums[i];}int res f;for (int i …

【经纬度坐标系、墨卡托投影坐标系和屏幕坐标系转换详解】

地图坐标系转换详解 1. 引言2. 坐标系定义2.1 经纬度坐标系2.2 墨卡托投影坐标系3.3 屏幕坐标系 2. 坐标系间的转换2.1 经纬度坐标系到墨卡托投影坐标系2.2 墨卡托投影坐标系到经纬度坐标系2.3 墨卡托投影坐标系到屏幕坐标系2.4 屏幕坐标系到墨卡托投影坐标系2.5 经纬度坐标系到…

mfc140u.dll文件错误的相关修复方法,4种方法修复mfc140u.dll

当面对基于Microsoft Visual C开发的应用程序出现启动或运行失败时&#xff0c;mfc140u.dll文件错误往往是罪魁祸首之一。这个动态链接库&#xff08;DLL&#xff09;文件对于许多Windows软件来说是必不可少的&#xff0c;因为它包含了重要的编程代码和数据。如果发现此文件损坏…

数据结构(7.1)——查找的基本概念

基本概念 查找——在数据结构集合中寻找满足某种条件的数据元素的过程称为查找 查找表&#xff08;查找结构&#xff09;——用于查找的数据集合称为查找表&#xff0c;它由同一类型的数据元素(或记录)组成 关键字——数据元素中唯一标识该元素的某个数据项的值&#xff0c;…

【C++二分查找 贪心】1488. 避免洪水泛滥

本文涉及的基础知识点 C二分查找 贪心&#xff1a;决策包容性 LeetCode1488. 避免洪水泛滥 你的国家有无数个湖泊&#xff0c;所有湖泊一开始都是空的。当第 n 个湖泊下雨前是空的&#xff0c;那么它就会装满水。如果第 n 个湖泊下雨前是 满的 &#xff0c;这个湖泊会发生 洪…

【Canvas与艺术】菊花孔雀螺旋

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>菊花孔雀螺旋</title><style type"text/css">…

HTML 揭秘:HTML 编码快速入门

HTML 揭秘&#xff1a;HTML 编码快速入门 一 . 前端知识介绍二 . HTML 介绍三 . HTML 快速入门四 . HTML 编辑器 - VSCode4.1 插件安装4.2 修改主题配色4.3 修改快捷键4.4 设置自动保存4.5 创建 HTML 文件4.5 书写 HTML 代码4.6 常见快捷键 五 . 基础标签5.1 字体标签5.1.1 col…

SpringCloud之配置中心git示例

SpringCloud之配置中心git示例 随着线上项目变的日益庞大&#xff0c;每个项目都散落着各种配置文件&#xff0c;如果采用分布式的开发模式&#xff0c;需要的配置文件随着 服务增加而不断增多。 某一个基础服务信息变更&#xff0c;都会引起一系列的更新和重启&#xff0c;…

探索有向图与无向图中深度优先搜索(DFS)的边类型——3×3 网格分析

探索有向图与无向图中深度优先搜索(DFS)的边类型——33 网格分析 一、基本概念二、有向图中的 DFS 边类型分析三、有向图 DFS 的 C 代码实现在图的深度优先搜索(DFS)过程中,边的分类对于理解算法的执行流程及其复杂性至关重要。在有向图和无向图中,DFS 过程中遇到的边可以…

【Kafka】分区与复制机制:解锁高性能与容错的密钥

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《大数据前沿&#xff1a;技术与应用并进》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、kafka简介 2、kafka使用场景 二、Kafka消息可…

【短距离通信】【WiFi】精讲WiFi P2P技术特点及拓扑组成

1. WiFi P2P技术特点 1.1 WiFi P2P定义 WiFi P2P&#xff08;WiFi Peer-to-Peer&#xff09;&#xff0c;也被称为WiFi Direct&#xff0c;是是WiFi联盟发布的一种无线通信技术&#xff0c;允许设备直接相互连接&#xff0c;而无需通过传统的WiFi接入点&#xff08;AP&#x…

【Python篇】matplotlib超详细教程-由入门到精通(下篇)

文章目录 前言第六部分&#xff1a;保存与导出图表6.1 保存为图片文件示例&#xff1a;保存图表为 PNG 文件解释&#xff1a;关键点&#xff1a; 6.2 保存为高分辨率图片示例&#xff1a;保存为高分辨率图片解释&#xff1a; 6.3 保存为不同文件格式示例&#xff1a;保存为不同…