lvgl 9标签控件 (lv_label) 使用指南

文章目录

    • 简介
    • 核心功能
    • 样式部分
      • `LV_PART_MAIN`
      • `LV_PART_SCROLLBAR`
      • `LV_PART_SELECTED`
    • 使用方法
      • 1. **设置文本**
      • 2. **换行**
      • 3. **长文本处理**
      • 4. **文本选择**
      • 5. **文本对齐**
      • 6. **长文本优化**
      • 7. **自定义滚动动画**
      • 8. **符号显示**
      • 9. **事件**
      • 10. **示例代码**
    • 总结


简介

lv_label 是 LittlevGL 中最基础的控件之一,用于显示文本。无论是简单的文字内容,还是需要动态更新的文本,lv_label 都能提供灵活和高效的解决方案。该控件支持多种文本样式、文本溢出处理方式以及文本选择功能,适用于各种图形界面应用。

核心功能

  • 动态文本设置:支持在运行时设置标签内容,可以使用格式化文本。
  • 长文本处理:为超出标签尺寸的长文本提供多种处理方式,如换行、截断、滚动等。
  • 文本选择:支持部分文本的选择操作,适合于文本编辑应用。
  • 符号显示:可以在文本中插入符号或显示符号。

样式部分

LV_PART_MAIN

这是标签的主要部分,包含文本内容的显示以及背景样式。通过设置文本和背景样式,您可以自定义标签的外观。

LV_PART_SCROLLBAR

当标签内容超出控件大小时,会显示一个滚动条。LV_PART_SCROLLBAR 用于显示滚动条的样式。

LV_PART_SELECTED

用于设置选中部分文本的样式。您可以控制文本颜色和背景颜色。


使用方法

1. 设置文本

lv_label 提供了多种方法来设置标签的文本内容:

  • 设置动态文本

    lv_label_set_text(label, "New text");  // 设置新的文本
    
  • 格式化文本:支持类似 printf 的格式化文本设置:

    lv_label_set_text_fmt(label, "Value: %d", 15);  // 格式化文本
    
  • 设置静态文本:使用静态字符数组来设置文本,这样文本不会动态分配内存,而是直接使用提供的缓冲区:

    lv_label_set_text_static(label, "Static text");  // 使用静态文本
    

注意:如果您使用 lv_label_set_text_static(),请确保传入的文本缓冲区是可写的,并且不会在使用时超出作用域。对于常量字符串,这种方法是安全的。


2. 换行

在标签文本中使用换行符 \n 可以实现多行显示:

lv_label_set_text(label, "line1\nline2\n\nline4");  // 多行文本

lv_label 会自动处理换行,您无需手动插入换行符。


3. 长文本处理

当标签的宽度不足以显示完整文本时,lv_label 提供了几种处理超长文本的方式:

  • LV_LABEL_LONG_WRAP:自动换行。如果高度设置为 LV_SIZE_CONTENT,标签的高度将根据内容自动调整;否则,文本将被截断(默认模式)。
  • LV_LABEL_LONG_DOT:用省略号(…)替换文本的最后三个字符。
  • LV_LABEL_LONG_SCROLL:如果文本宽度超过标签宽度,将会水平或垂直滚动显示,水平滚动优先。
  • LV_LABEL_LONG_SCROLL_CIRCULAR:类似于 LV_LABEL_LONG_SCROLL,但文本会循环滚动。
  • LV_LABEL_LONG_CLIP:直接裁剪超出标签的文本部分。

您可以使用 lv_label_set_long_mode(label, LV_LABEL_LONG_...) 来设置长文本模式。例如:

lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL);  // 启用滚动模式

4. 文本选择

如果启用了文本选择 (LV_LABEL_TEXT_SELECTION),用户可以选择文本,就像在PC上用鼠标选择文本一样。可以通过 lv_label_get_text_selection_start()lv_label_get_text_selection_end() 获取选中的文本范围。


5. 文本对齐

您可以设置标签中文本的对齐方式。通过 text_align 样式属性来设置水平对齐:

lv_obj_set_style_text_align(label, LV_TEXT_ALIGN_CENTER);  // 设置文本居中对齐

需要注意的是,文本对齐效果仅在标签宽度大于最长行文本的宽度时才会生效,并且文本必须包含多行且行长度不等时才能看到明显的对齐效果。


6. 长文本优化

对于超长文本(例如超过40K字符的标签),可以启用一个优化选项,以提高绘制效率。只需要在 lv_conf.h 配置文件中启用 LV_LABEL_LONG_TXT_HINT

#define LV_LABEL_LONG_TXT_HINT 1  // 启用长文本优化

启用此功能后,LVGL 会为长文本节省一些额外的内存,提升绘制效率。


7. 自定义滚动动画

对于使用滚动模式(如 LV_LABEL_LONG_SCROLLLV_LABEL_LONG_SCROLL_CIRCULAR)的标签,您可以自定义滚动动画效果。通过设置样式中的 anim 属性,您可以控制滚动动画的外观和行为:

lv_style_set_anim(&style, LV_ANIM_TYPE_ROTATE);  // 设置动画类型为旋转

8. 符号显示

标签可以显示符号,您可以通过 lv_label_set_text() 设置符号和字母一起显示。有关符号的更多信息,请参阅 LVGL 字体部分。


9. 事件

lv_label 本身并不会发送特定的事件,但它可以作为其他控件(如文本区域)的基础。对于标签的事件处理,可以参考基控件的事件机制。


10. 示例代码

以下是一个简单的示例,展示如何使用 lv_label 创建一个标签并设置文本:

#include "lvgl.h"lv_obj_t *label;void create_label() {label = lv_label_create(lv_scr_act());  // 创建标签lv_label_set_text(label, "Hello, LittlevGL!");  // 设置标签文本lv_obj_align(label, LV_ALIGN_CENTER, 0, 0);  // 标签居中显示
}int main() {lv_init();create_label();while (1) {lv_task_handler();  // 处理任务}
}

总结

lv_label 是 LittlevGL 提供的一个非常灵活的文本显示控件。无论是静态文本、动态文本、长文本处理,还是文本选择功能,lv_label 都能够满足各种需求。通过精细的样式配置和文本处理选项,您可以在嵌入式应用程序中轻松实现丰富的文本显示效果。

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

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

相关文章

Profinet IO从站数据 转 opc ua项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 使用PRONETA软件获取PROFINET IO从站的配置信息 5 设置网关采集PROFINETIO从站设备数据 6 启动OPC UA协议转发采集的数据 7 选择槽号和数据地址 8 选择子槽号 9 案例总结 1 案例说明 设置网关采集ProfinetIO从站设…

android studio 读写文件操作(应用场景二)

android studio版本:2023.3.1 patch2 例程:readtextviewIDsaveandread 本例程是个过渡例程,如果单是实现下图的目的有更简单的方法,但这个方法是下一步工作的基础,所以一定要做。 例程功能:将两个textvi…

基于SSM框架企业人事管理系统的设计与实现

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

百度智能云 CHPC: 使用 BtuneAK对基因测序软件进行加速

背景 本文主要介绍在 CHPC 平台使用 BtuneAK 自动化加速组件,可以直接对BWA、FastQC、Picard、Trimmomatic等业务端到端时长加速。 Btune 简单介绍 BtunePK介绍 BtunePK 是百度自研的一款性能分析和调优工具,兼容Intel、AMD、ARM三个CPU平台&#xff0…

Power BI - 批量导入数据

1.简单介绍 假定已经使用Power Automate Desktop(微软的RPA产品,是Power Platform平台的其中一个产品)从福布斯中文网获取了各地区的2024年的财富数据如下, 现在想批量导入数据到Power BI中,分析一下各地区的产业以及财富情况 2.具体说明 …

实现跨平台 SSH 连接:从 macOS 到 Windows WSL 的完整解决方案20241203

🌐 实现跨平台 SSH 连接:从 macOS 到 Windows WSL 的完整解决方案 ✨ 引言 随着跨平台开发的普及,开发者经常需要在多系统环境中切换和协作。尤其是在 macOS 和 Windows 混合使用的开发环境中,通过 SSH 远程访问和管理 Windows …

【css】基础(二)

本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:css专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &a…

2024通信工程师-中级-互联网技术备考经验

考试简介 全国通信专业技术人员职业水平考试,是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试。根据原人事部、信息产业部文件(国人部发[2006]10号),通信专业技术人员职业水平评价,纳入全国专业技术人…

智能文档解析综述:结构化信息提取的技术、挑战与前景

综述论文:https://arxiv.org/abs/2410.21169 摘要 文档解析对于将非结构化和半结构化文档(如合同、学术论文和发票)转换为结构化、机器可读的数据至关重要。通过从非结构化输入中提取可靠的结构化数据,文档解析为众多应用提供了极…

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里,如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …

操作系统——文件系统

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt,仅供学习交流使用,谢谢。 文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。从系统角度来看,文件系统是…

java面向对象实验——扫雷+24点

扫雷 窗口绘制: GameWin package com.sxt;import javax.swing.*;public class GameWin extends JFrame {void launch(){this.setVisible(true);this.setSize(500, 500);this.setLocationRelativeTo(null);this.setTitle("SWE23070扫雷游戏");this.setD…

GPU 调度策略架构与CUDA运行机制(二)

市面上有很多GPU厂家,他们产品的软硬件架构各不相同,但是核心往往差不多,整明白了一个基本上就可以触类旁通了。针对当前gpu底层的一些架构以及硬件层一些调度策略的话估计大部分人就很难说的上熟悉了,这个不是大家的错&#xff0…

ddos攻击防御的方法有哪些

DDoS攻击,即分布式拒绝服务攻击(Distributed Denial of Service),是一种恶意的网络攻击方式,旨在通过发送大量流量或请求到目标服务器、服务或网络,使其资源耗尽,无法处理合法用户的请求,从而导致服务中断或…

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …

RuoYi中数据分页功能实现的步骤(nvliz)

目录 前言 数据分页的作用 RuoYi中的实现步骤 前端的显示界面(实例介绍) 源码分析(前端) Pagination(分页组件)介绍 前端:getList()(方法源码分析) 源码分析(后端) 后端:List()…

HarmonyOS 5.0应用开发——全局广播的使用

【高心星出品】 文章目录 全局广播的使用公共事件接受系统公共事件原理 发布与订阅自定义公共事件订阅系统事件 全局广播的使用 全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。 公共事件 CES(Common Event Service&…

ceph存储池

1、存储池 1、存储池的概念 存储池就是ceph的逻辑分区,专门用来存储对象的 特点 将文件切片成对象,通过hash算法,找到存储池中的pg,池中的pg根据crush算法找到osd节点 存储中的PG数量对性能有重要的影响,过多和过少…

Ollama记录

先在官网下载Ollama 模型下载 ollama run qwen2:0.5b 可以快速部署很多模型 方便 可以替换openai api key from openai import OpenAIclient OpenAI(base_url https://127.0.0.1:11434/v1,api_keyollama, # required, but unused )response client.chat.completions.…

锻造船用发动机动力系统,铸强船舶“心脏”

船舶是海洋、湖泊及河流中重要的水上交通工具,不仅能够促进海上经济的发展,还能够保卫国家的制海权。船舶动力装置,也就是船舶的核心动力源——船用发动机动力系统对船舶的重要作用不言自明,关系到船舶的性能质量,能够…