撙仿 发表于 2025-6-30 22:54:49

LVGL-富文本

lv_spangroup_create

用于创建富文本容器(Spangroup)的函数,用于管理多段不同样式的文本
lv_obj_t* lv_spangroup_create(lv_obj_t* parent);
//parent:父对象指针
//ret:创建的 Spangroup 对象指针lv_spangroup_new_span

用于向 Spangroup 对象添加新文本片段(Span)的函数
lv_span_t* lv_spangroup_new_span(lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:新创建的 Span 描述符指针(lv_span_t*),用于后续文本和样式设置lv_spangroup_del_span

用于从 Spangroup 对象中删除指定文本片段(Span)的函数
void lv_spangroup_del_span(lv_obj_t* spangroup, lv_span_t* span);
//spangroup:Spangroup 对象指针
//span:要删除的 Span 描述符指针lv_span_set_text

用于动态设置 Span 对象文本内容的函数,支持内存自动分配和样式混合
void lv_span_set_text(lv_span_t* span, const char* text);
//span:通过 lv_spangroup_new_span() 创建的 Span 描述符指针
//text:需设置的文本字符串(以 \0 结尾)lv_span_set_text_static

用于为 Span 对象设置静态文本的函数,与动态文本函数 lv_span_set_text() 不同,它直接引用外部文本内存而不进行复制,适合长期存在的常量字符串
void lv_span_set_text_static(lv_span_t* span, const char* text);
//span:通过 lv_spangroup_new_span() 创建的 Span 描述符指针
//text:需设置的静态文本字符串(需保证生命周期与 Span 一致)lv_spangroup_set_align

用于设置 Spangroup 对象内文本对齐方式的函数,适用于富文本容器的布局控制
void lv_spangroup_set_align(lv_obj_t* spangroup, lv_text_align_t align);
//spangroup:Spangroup 对象指针(由 lv_spangroup_create() 创建)
/*
align:对齐模式,支持以下枚举值:
LV_TEXT_ALIGN_LEFT:左对齐(默认)。
LV_TEXT_ALIGN_CENTER:居中对齐。
LV_TEXT_ALIGN_RIGHT:右对齐。
LV_TEXT_ALIGN_AUTO:根据文本方向自动选择对齐方式(如阿拉伯语从右向左显示)
*/lv_spangroup_set_overflow

用于设置 Spangroup 对象文本溢出处理方式的函数,支持裁剪或显示省略号等行为
void lv_spangroup_set_overflow(lv_obj_t* spangroup, lv_span_overflow_t overflow);
//spangroup:Spangroup 对象指针(由 lv_spangroup_create() 创建)
//overflow:溢出模式,可选值:
//LV_SPAN_OVERFLOW_CLIP:裁剪溢出文本(默认)。
//LV_SPAN_OVERFLOW_ELLIPSIS:溢出时显示省略号(...)lv_spangroup_set_indent

用于设置 Spangroup 对象首行文本缩进的函数,支持像素单位和百分比单位
void lv_spangroup_set_indent(lv_obj_t* spangroup, int32_t indent);
//spangroup:Spangroup 对象指针(由 lv_spangroup_create() 创建)
//indent:缩进值:
//像素单位:直接指定像素值(如 20 表示缩进20像素)。
//百分比单位:仅在 LV_SPAN_MODE_FIXED 和 LV_SPAN_MODE_BREAK 模式下生效,需传入 LV_PCT(x) 宏(如 LV_PCT(10) 表示缩进容器宽度的10%)lv_spangroup_set_mode

用于设置 Spangroup 对象文本布局模式的核心函数,控制文本的换行、容器尺寸调整等行为
void lv_spangroup_set_mode(lv_obj_t* spangroup, lv_span_mode_t mode);
//spangroup:Spangroup 对象指针
//mode:布局模式,支持以下枚举值:
//LV_SPAN_MODE_FIXED:固定容器尺寸,文本超出部分被裁剪或显示省略号(需配合 lv_spangroup_set_overflow() 使用)。
//LV_SPAN_MODE_EXPAND:单行模式,容器宽度自动扩展以适应文本长度,高度不变。
//LV_SPAN_MODE_BREAK:自动换行模式,保持容器宽度不变,文本超出行宽时自动换行并扩展高度lv_spangroup_set_lines

用于设置 Spangroup 对象在BREAK 模式下最大显示行数的函数,支持限制文本行数或自动扩展高度
void lv_spangroup_set_lines(lv_obj_t* spangroup, int32_t lines);
//spangroup:Spangroup 对象指针
//lines:最大行数:
正值(如 5):限制显示指定行数,超出行数部分隐藏。
负值(如 -1):不限制行数,文本自动换行并扩展容器高度lv_spangroup_get_child

用于获取 Spangroup 对象内指定索引的子 Span 描述符的函数,适用于动态管理富文本中的不同文本片段
lv_span_t* lv_spangroup_get_child(const lv_obj_t* spangroup, int32_t id);
//spangroup:Spangroup 对象指针
//id:子 Span 的索引:
//正数:从 0 开始的正向索引(如 0 表示第一个 Span)。
//负数:从 -1 开始的逆向索引(如 -1 表示最后一个 Span,-2 表示倒数第二个)
//ret:返回指向 lv_span_t 描述符的指针,若索引无效则返回 NULLlv_spangroup_get_child_cnt

用于获取 Spangroup 对象内子 Span 数量的函数,适用于动态管理富文本中的文本片段
uint32_t lv_spangroup_get_child_cnt(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回 Spangroup 中包含的子 Span 数量(uint32_t 类型),若对象无效则返回 0lv_spangroup_get_align

用于获取 Spangroup 对象当前文本对齐方式的函数
lv_text_align_t lv_spangroup_get_align(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回 lv_text_align_t 枚举值,表示当前对齐方式:
//LV_TEXT_ALIGN_LEFT:左对齐
//LV_TEXT_ALIGN_CENTER:居中对齐
//LV_TEXT_ALIGN_RIGHT:右对齐
//LV_TEXT_ALIGN_AUTO:自动对齐(根据语言方向调整)lv_spangroup_get_overflow

用于获取 Spangroup 对象当前文本溢出处理模式的函数
lv_span_overflow_t lv_spangroup_get_overflow(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回 lv_span_overflow_t 枚举值,表示当前溢出处理模式:
//LV_SPAN_OVERFLOW_CLIP:裁剪溢出文本(默认值)。
//LV_SPAN_OVERFLOW_ELLIPSIS:显示省略号(...)表示溢出。lv_spangroup_get_indent

用于获取 Spangroup 对象首行缩进值的函数
int32_t lv_spangroup_get_indent(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回首行缩进值(int32_t 类型),单位为像素或百分比lv_spangroup_get_mode

用于获取 Spangroup 对象当前布局模式的函数
lv_span_mode_t lv_spangroup_get_mode(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//返回 lv_span_mode_t 枚举值,表示当前布局模式:
//LV_SPAN_MODE_FIXED:固定对象尺寸,文本超出部分被裁剪或显示省略号 。
//LV_SPAN_MODE_EXPAND:自动扩展宽度以适应文本(单行显示)。
//LV_SPAN_MODE_BREAK:固定宽度,自动换行并扩展高度 lv_spangroup_get_lines

用于获取 Spangroup 对象当前设置的最大显示行数的函数
int16_t lv_spangroup_get_lines(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//返回 int16_t 类型的值:
//正数:表示当前设置的最大行数限制(仅在 LV_SPAN_MODE_BREAK 模式下生效)。
//负数(如 -1):表示无行数限制(默认值)lv_spangroup_get_max_line_h

用于获取 Spangroup 对象当前文本行的最大高度的函数
int32_t lv_spangroup_get_max_line_h(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回 int32_t 类型的值,表示当前文本行的最大高度(单位为像素)。若 Spangroup 无文本或未设置样式,可能返回 0。lv_spangroup_get_expand_width

用于获取 Spangroup 对象在 LV_SPAN_MODE_EXPAND 模式下的文本内容总宽度的函数
int32_t lv_spangroup_get_expand_width(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针(需通过 lv_spangroup_create() 创建)
//ret:返回 int32_t 类型的值,表示文本内容在无换行情况下的总宽度(单位为像素)。若 Spangroup 无文本或未设置样式,可能返回 0lv_spangroup_get_expand_height

用于获取 Spangroup 对象在自动扩展模式下的文本内容总高度的函数
int32_t lv_spangroup_get_expand_height(const lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针
//ret:返回 int32_t 类型的值,表示文本内容在无高度限制时的总高度(单位为像素)。若 Spangroup 无文本或未设置样式,可能返回 0lv_spangroup_refr_mode

用于刷新 Spangroup 对象布局模式的函数,通常在修改文本内容或样式后调用以更新显示
void lv_spangroup_refr_mode(lv_obj_t* spangroup);
//spangroup:Spangroup 对象指针void lv_example_span_1(void)
{
    // 定义一个静态样式变量
    static lv_style_t style;
    lv_style_init(&style); // 初始化样式
    lv_style_set_border_width(&style, 1); // 设置边框宽度为 1 像素
    lv_style_set_border_color(&style, lv_palette_main(LV_PALETTE_ORANGE)); // 设置边框颜色为橙色
    lv_style_set_pad_all(&style, 2); // 设置所有方向的填充为 2 像素

    // 创建一个文本段组(spangroup)对象,并将其添加到当前屏幕
    lv_obj_t * spans = lv_spangroup_create(lv_scr_act());
    lv_obj_set_width(spans, 300); // 设置文本段组的宽度为 300 像素
    lv_obj_set_height(spans, 300); // 设置文本段组的高度为 300 像素
    lv_obj_center(spans); // 将文本段组居中
    lv_obj_add_style(spans, &style, 0); // 将样式应用到文本段组

    // 设置文本段组的对齐方式为左对齐
    lv_spangroup_set_align(spans, LV_TEXT_ALIGN_LEFT);
    // 设置文本段组的溢出行为为裁剪
    lv_spangroup_set_overflow(spans, LV_SPAN_OVERFLOW_CLIP);
    // 设置文本段组的缩进为 20 像素
    lv_spangroup_set_indent(spans, 20);
    // 设置文本段组的模式为自动换行
    lv_spangroup_set_mode(spans, LV_SPAN_MODE_BREAK);

    // 创建一个文本段,并设置其文本内容
    lv_span_t * span = lv_spangroup_new_span(spans);
    lv_span_set_text(span, "China is a beautiful country.");
    // 设置该文本段的样式
    lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_RED)); // 设置文本颜色为红色
    lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_UNDERLINE); // 设置文本装饰为下划线
    lv_style_set_text_opa(&span->style, LV_OPA_50); // 设置文本的透明度为 50%

    // 创建另一个文本段,并设置其文本内容
    span = lv_spangroup_new_span(spans);
    lv_span_set_text_static(span, "good good study, day day up.");
    // 设置该文本段的样式
#if LV_FONT_MONTSERRAT_24
    lv_style_set_text_font(&span->style, &lv_font_montserrat_24); // 设置文本字体为 Montserrat 24
#endif
    lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_GREEN)); // 设置文本颜色为绿色

    // 创建第三个文本段,并设置其文本内容
    span = lv_spangroup_new_span(spans);
    lv_span_set_text_static(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(spans);
    lv_span_set_text_static(span, "the boy no name.");
    // 设置该文本段的样式
    lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_GREEN)); // 设置文本颜色为绿色
#if LV_FONT_MONTSERRAT_20
    lv_style_set_text_font(&span->style, &lv_font_montserrat_20); // 设置文本字体为 Montserrat 20
#endif
    lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_UNDERLINE); // 设置文本装饰为下划线

    // 创建第五个文本段,并设置其文本内容
    span = lv_spangroup_new_span(spans);
    lv_span_set_text(span, "I have a dream that hope to come true.");
    // 设置该文本段的样式
    lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_STRIKETHROUGH); // 设置文本装饰为删除线

    // 刷新文本段组的模式
    lv_spangroup_refr_mode(spans);
}
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: LVGL-富文本