【LVGL(5)】标签的(label)用法

本文档详细介绍了LVGL库中的Label对象,包括如何创建、设置文本、格式化、调整大小、改变字体样式、文本颜色及选择,以及与图标和事件处理的集成。重点讲解了文本滚动和截断策略,适合前端开发者深入理解LVGL的文本显示和控制技巧。

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

官方手册:Label (lv_label) — LVGL documentationhttps://docs.lvgl.io/master/widgets/core/label.html


标签(lv_label)

标签是用于显示文本的基本对象类型。

盒子模型中,标签的组成:

  • LV_PART_MAIN 矩形部分(盒子区域)。 填充值可用于在文本和背景之间添加空间。   
  • LV_PART_SCROLLBAR 当要展示的文本大于部件的大小时,显示的滚动条部分。   
  • LV_PART_SELECTED 选中文本时,突出显示的部分。label只能使用 text_color 和 bg_color 样式属性

创建标签

lv_obj_t * label = lv_label_create(parent);

设置文本

设置要显示的文本

动态分配缓冲区,不保留传递的文本。

lv_label_set_text(label, "HELLOW LVGL");

也能够显示来自静态字符缓冲区的文本。文本不会存储在动态内存中,而是直接使用给定的缓冲区。

lv_label_set_text_static(label, "Text")

格式化显示文本

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

换行

使用 \n 换行,例如:

lv_label_set_text(label, "line1\nline2\n\nline4");

设置文本大小

默认情况标签的大小设置为 LV_SIZE_CONTENT 会自动拓展成和文本一样的大小。

如果设置了宽度或高度,可以根据几种长模式策略来操纵比标签宽度更宽的文本。

lv_obj_set_width(label,50);    //设置宽度    
lv_obj_set_height(label,20);    //设置高度
lv_obj_set_size(label,20,50); 

这样就可能出现文本的宽度或高度大小label的情况,就需要做一些调整。

  • LV_LABEL_LONG_WRAP:换行太长。 如果高度是 LV_SIZE_CONTENT标签的高度将被扩大,否则文本将被剪裁。 (默认) 
  • LV_LABEL_LONG_DOT:将标签右下角的最后 3 个字符替换为点 ( ...) 
  • LV_LABEL_LONG_SCROLL:如果文本比标签宽,则水平来回滚动。 如果它更高,请垂直滚动。 只滚动一个方向,水平滚动具有更高的优先级。 
  • LV_LABEL_LONG_SCROLL_CIRCULAR:如果文本比标签宽,则连续水平滚动。 如果它更高,请垂直滚动。 只滚动一个方向,水平滚动具有更高的优先级。 
  • LV_LABEL_LONG_CLIP:只需剪切标签外的文本部分即可

注意:LV_LABEL_LONG_DOT 是直接操作文本缓冲区以添加/删除点。如果使用 lv_label_set_text 和 lv_label_set_text_fmt 它们会分配一个单独的缓冲区,不会出问题。但是如果使用 lv_label_set_text_static 时我们传递给它的缓冲区必须是可写的。

设置接口

lv_label_set_long_mode(label, LV_LABEL_LONG_...)

设置字体样式

设置自定义字库也如同这样

lv_obj_t * label = lv_label_create(lv_scr_act());    // 创建一个label部件(对象),他的父对象是活动屏幕对象
lv_obj_set_style_text_font(label, &lv_font_simsun_16_cjk, 0);    // 使用内置的 cjk 字库
lv_label_set_text(label, "text");

文本重新着色

改变标签颜色

lv_obj_set_style_bg_color(label, lv_color_hex(0xf7b37b), 0);    
lv_obj_set_style_bg_opa(label, 100, 0);   //不透明度

可以通过样式改色

lv_style_set_text_color(&style_obj, lv_color_hex(0xf7b37b));    //共享样式
lv_obj_set_style_text_color(label, lv_color_hex(0xf7b37b), 0);    //本地样式

可以让文本某些部分重新上色

说明:#0000ff Re-color#:颜色值:0x0000ff,改变文本:Re-color

lv_label_set_recolor(label, true);
lv_label_set_text(label, "#0000ff Re-color# #ff00ff words# #ff0000 of a# label");

文本选择

如果在 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);
lv_label_set_text_sel_start(label, 1);
lv_label_set_text_sel_end(label, 6);

内置图标

 直接显示图标

lv_label_set_text(my_label, LV_SYMBOL_OK);

与字符串一起使用

lv_label_set_text(my_label, LV_SYMBOL_OK "Apply");

许多个图标一起

lv_label_set_text(my_label, LV_SYMBOL_OK LV_SYMBOL_WIFI LV_SYMBOL_PLAY);

事件

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);

<think>好的,用户的问题是关于如何在LVGL 9.2.0中使用label组件和内置的CJK汉字库。首先,我需要回忆一下LVGL的基本知识,特别是关于字体和标签的部分。LVGL是一个开源的嵌入式图形库,支持多种显示和输入设备。标签组件(label)用于显示文本,而CJK字体则涉及中、日、韩等语言的字符集。 用户提到的是LVGL 9.2.0版本,所以需要确认该版本是否内置了CJK汉字库。根据之前的了解,LVGL确实支持CJK字符,但可能需要手动配置或启用。首先,需要检查LVGL的文档或者源码,确认CJK字体的包含方式。通常,字体需要被编译到项目中,用户可能需要使用工具转换字体文件为LVGL可用的格式,比如使用LVGL提供的在线字体转换工具。 接下来,关于label的使用,用户可能需要知道如何创建label对象并设置其文本属性。需要确保在创建label时,选择合适的字体,并且该字体包含所需的CJK字符。另外,字符编码的问题也很重要,用户需要确保源代码文件的编码与LVGL使用的编码一致,比如UTF-8,以避免乱码问题。 然后,考虑到用户提到的内置CJK汉字库,可能需要通过配置LVGL的配置文件(如lv_conf.h)来启用相关选项。例如,设置LV_FONT_CJK_DECODE为1,或者包含特定的字体文件。如果内置的CJK字体是作为默认字体的一部分,可能需要调整字体的大小和范围,以覆盖所需的字符集。 此外,用户可能在集成过程中遇到字符显示不全或者乱码的问题,这可能涉及到字符集转换的问题。例如,如果导出的字体文件字符集与LVGL预期的字符集不一致,可能需要转换,但根据引用[^3],单字节字符集之间的转换比较容易,而多字节(如UTF-8)可能需要确保正确配置。需要提醒用户检查字体生成时的字符集设置,以及项目中的编码环境是否一致。 最后,生成相关问题需要考虑用户可能遇到的后续问题,比如字体优化、动态加载、内存占用等。同时,可能涉及如何自定义字体、处理多语言切换、以及解决显示异常的情况。需要确保回答的结构清晰,步骤明确,帮助用户逐步解决问题,并引用相关文档或社区资源作为参考。</think>### LVGL 9.2.0 使用 Label 和 CJK 汉字库方法教程 #### 1. **配置CJK字体支持** - **启用内置CJK字体**:在`lv_conf.h`配置文件中,确保以下配置生效: ```c #define LV_FONT_CJK_DECODE 1 // 启用CJK字符解码 #define LV_FONT_DEFAULT &lv_font_cjk // 设置默认字体为CJK字体 ``` 部分版本可能需要手动添加CJK字体文件(如`lv_font_cjk.c`),需从LVGL官方仓库或社区资源获取[^3]。 - **生成自定义字体**:若需扩展字符范围,可使用[LVGL在线字体转换工具](https://lvgl.io/tools/fontconverter): 1. 选择包含CJK字符的TTF字体文件(如思源黑体) 2. 设置字符范围:例如`0x4E00-0x9FFF`覆盖常用汉字 3. 生成`.c`和`.h`文件并添加到工程中 #### 2. **创建Label并应用字体** ```c lv_obj_t *label = lv_label_create(lv_scr_act()); // 创建标签 lv_label_set_text(label, "你好LVGL"); // 设置中文字符 lv_obj_set_style_text_font(label, &lv_font_cjk, LV_STATE_DEFAULT); // 显式指定字体 ``` #### 3. **编码与工程配置** - **文件编码**:确保源码文件保存为**UTF-8编码**(多数IDE默认支持) - **编译器设置**:添加编译选项`-fexec-charset=UTF-8`(GCC)保证二进制字符编码正确 #### 4. **验证与调试** ```c printf("汉字测试: \xE4\xBD\xA0\xE5\xA5\xBD\n"); // 输出"你好"的UTF-8字节序列 ``` 若终端显示乱码,需检查系统字符集支持(如Linux下配置`locale`为`zh_CN.UTF-8`)[^1][^2]。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值