找回密码
 立即注册
首页 业界区 科技 LVGL-富文本

LVGL-富文本

撙仿 2025-6-30 22:54:49
lv_spangroup_create

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

用于刷新 Spangroup 对象布局模式的函数,通常在修改文本内容或样式后调用以更新显示
  1. void lv_spangroup_refr_mode(lv_obj_t* spangroup);
  2. //spangroup:Spangroup 对象指针
复制代码
  1. void lv_example_span_1(void)
  2. {
  3.     // 定义一个静态样式变量
  4.     static lv_style_t style;
  5.     lv_style_init(&style); // 初始化样式
  6.     lv_style_set_border_width(&style, 1); // 设置边框宽度为 1 像素
  7.     lv_style_set_border_color(&style, lv_palette_main(LV_PALETTE_ORANGE)); // 设置边框颜色为橙色
  8.     lv_style_set_pad_all(&style, 2); // 设置所有方向的填充为 2 像素
  9.     // 创建一个文本段组(spangroup)对象,并将其添加到当前屏幕
  10.     lv_obj_t * spans = lv_spangroup_create(lv_scr_act());
  11.     lv_obj_set_width(spans, 300); // 设置文本段组的宽度为 300 像素
  12.     lv_obj_set_height(spans, 300); // 设置文本段组的高度为 300 像素
  13.     lv_obj_center(spans); // 将文本段组居中
  14.     lv_obj_add_style(spans, &style, 0); // 将样式应用到文本段组
  15.     // 设置文本段组的对齐方式为左对齐
  16.     lv_spangroup_set_align(spans, LV_TEXT_ALIGN_LEFT);
  17.     // 设置文本段组的溢出行为为裁剪
  18.     lv_spangroup_set_overflow(spans, LV_SPAN_OVERFLOW_CLIP);
  19.     // 设置文本段组的缩进为 20 像素
  20.     lv_spangroup_set_indent(spans, 20);
  21.     // 设置文本段组的模式为自动换行
  22.     lv_spangroup_set_mode(spans, LV_SPAN_MODE_BREAK);
  23.     // 创建一个文本段,并设置其文本内容
  24.     lv_span_t * span = lv_spangroup_new_span(spans);
  25.     lv_span_set_text(span, "China is a beautiful country.");
  26.     // 设置该文本段的样式
  27.     lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_RED)); // 设置文本颜色为红色
  28.     lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_UNDERLINE); // 设置文本装饰为下划线
  29.     lv_style_set_text_opa(&span->style, LV_OPA_50); // 设置文本的透明度为 50%
  30.     // 创建另一个文本段,并设置其文本内容
  31.     span = lv_spangroup_new_span(spans);
  32.     lv_span_set_text_static(span, "good good study, day day up.");
  33.     // 设置该文本段的样式
  34. #if LV_FONT_MONTSERRAT_24
  35.     lv_style_set_text_font(&span->style, &lv_font_montserrat_24); // 设置文本字体为 Montserrat 24
  36. #endif
  37.     lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_GREEN)); // 设置文本颜色为绿色
  38.     // 创建第三个文本段,并设置其文本内容
  39.     span = lv_spangroup_new_span(spans);
  40.     lv_span_set_text_static(span, "LVGL is an open-source graphics library.");
  41.     // 设置该文本段的样式
  42.     lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_BLUE)); // 设置文本颜色为蓝色
  43.     // 创建第四个文本段,并设置其文本内容
  44.     span = lv_spangroup_new_span(spans);
  45.     lv_span_set_text_static(span, "the boy no name.");
  46.     // 设置该文本段的样式
  47.     lv_style_set_text_color(&span->style, lv_palette_main(LV_PALETTE_GREEN)); // 设置文本颜色为绿色
  48. #if LV_FONT_MONTSERRAT_20
  49.     lv_style_set_text_font(&span->style, &lv_font_montserrat_20); // 设置文本字体为 Montserrat 20
  50. #endif
  51.     lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_UNDERLINE); // 设置文本装饰为下划线
  52.     // 创建第五个文本段,并设置其文本内容
  53.     span = lv_spangroup_new_span(spans);
  54.     lv_span_set_text(span, "I have a dream that hope to come true.");
  55.     // 设置该文本段的样式
  56.     lv_style_set_text_decor(&span->style, LV_TEXT_DECOR_STRIKETHROUGH); // 设置文本装饰为删除线
  57.     // 刷新文本段组的模式
  58.     lv_spangroup_refr_mode(spans);
  59. }
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册