文章目录
- 简介
- 核心功能
- 样式部分
- `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_SCROLL
和 LV_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
都能够满足各种需求。通过精细的样式配置和文本处理选项,您可以在嵌入式应用程序中轻松实现丰富的文本显示效果。