目录
一、Label 简介
1.1 Overview(概述)
标签是用来显示文本的基本对象类型。
1.2 Parts and Styles(部分和风格)
- LV_PART_MAIN :使用所有典型的背景属性和文本属性。 填充值可用于在文本和背景之间添加空间。
- LV_PART_SCROLLBAR: 当文本大于组件的大小时显示的滚动条。
- LV_PART_SELECTED: 告诉所选文本的样式,只能使用 text_color 和 bg_color 样式属性。
注:文本的背景的opa默认是0。
二、Label 使用
2.1 Set text(设置文本)
标签设置文本LVGL共提供了3中方式:
① 将动态分配一个缓冲区,并且提供的字符串将被复制到该缓冲区中。
② 类似printf 格式通过传递参数来设置文本。
③ 显示来自静态字符缓冲区的文本。
lv_label_set_text(label, "New text");
lv_label_set_text_fmt(label, "Value: %d", 15);
lv_label_set_text_static(label, "Text");
2.2 Newline(新行)
换行符由标签对象自动处理。 您可以使用 \n 来换行。 例如:“line1\nline2\n\nline4”
2.3 Long modes(长模式)
enum {
LV_LABEL_LONG_WRAP, /**< 保持对象宽度,换行过长的行,展开对象高度*/
LV_LABEL_LONG_DOT, /**< 保持大小,如果文本太长,在末尾写圆点*/
LV_LABEL_LONG_SCROLL, /**< 保持文本大小并来回滚动*/
LV_LABEL_LONG_SCROLL_CIRCULAR, /**< 保持大小并循环滚动文本*/
LV_LABEL_LONG_CLIP, /**< 保持大小并剪辑文本*/
};
typedef uint8_t lv_label_long_mode_t;
/*使用接口*/
void lv_label_set_long_mode(lv_obj_t* obj, lv_label_long_mode_t long_mode);
2.4 Text recolor(文本重新着色)
在文本中,想要设置部分文本为特定的颜色,需要用到的接口 void lv_label_set_recolor(lv_obj_t obj, bool en);
使用步骤如下:
/*使能recolor*/
lv_label_set_recolor(label,true);
/*设置对应文本颜色*/
lv_label_set_text(label,"#0000ff color# my test");
注:必须先使能recolor重新着色才能生效,使用“# # ”中间要有字体颜色参数和显示内容 其中“0000FF”表示Hex格式的RGB值。
2.5 Text selection(文本选择)
如果通过LV_LABEL_TEXT_SELECTION(lv_conf.h中选择) 启用,可以选择部分文本。 这与在 PC 上使用鼠标选择文本时类似。使用接口。
void lv_label_set_text_sel_start(lv_obj_t* obj, uint32_t index); //选择起始索引
void lv_label_set_text_sel_end(lv_obj_t* obj, uint32_t index);//选择结束索引
示例与实现
2.6 Very long texts(超长文本)
LVGL 可以通过保存一些额外的数据(~12 字节)来有效地处理很长(例如 > 40k 个字符)的标签以加快绘图速度。 要启用此功能,请在“lv_conf.h”中设置“LV_LABEL_LONG_TXT_HINT 1”。
三、Label API
lv_obj_t * lv_label_create(lv_obj_t * parent); //创建一个标签对象
void lv_label_set_text(lv_obj_t * obj, const char * text); //为标签设置一个新文本。内存将分配给存储文本的标签。
void lv_label_set_text_fmt(lv_obj_t * obj, const char * fmt, ...) LV_FORMAT_ATTRIBUTE(2, 3);//为标签设置一个新的格式化文本。内存将分配给存储文本的标签。
void lv_label_set_text_static(lv_obj_t * obj, const char * text); //设置静态文本。它不会被标签保存,所以'text'变量必须是“活着”,而标签存在。
void lv_label_set_long_mode(lv_obj_t * obj, lv_label_long_mode_t long_mode); //设置文本长度大于对象大小的标签的行为
void lv_label_set_recolor(lv_obj_t * obj, bool en); //通过内联命令启用重新着色
void lv_label_set_text_sel_start(lv_obj_t * obj, uint32_t index); //设置文本选择应该从哪里开始
void lv_label_set_text_sel_end(lv_obj_t * obj, uint32_t index); //设置文本选择的结束位置
char * lv_label_get_text(const lv_obj_t * obj); //获取标签的文本
lv_label_long_mode_t lv_label_get_long_mode(const lv_obj_t * obj); //获取标签的长模式
bool lv_label_get_recolor(const lv_obj_t * obj); //获取重新着色属性
void lv_label_get_letter_pos(const lv_obj_t * obj, uint32_t char_id, lv_point_t * pos); //获取一个字母的相对x和y坐标
uint32_t lv_label_get_letter_on(const lv_obj_t * obj, lv_point_t * pos_in); //获取标签相对位置上的字母索引。
bool lv_label_is_char_under_pos(const lv_obj_t * obj, lv_point_t * pos); //检查是否在点下绘制字符。
uint32_t lv_label_get_text_selection_start(const lv_obj_t * obj); //获取选择的起始索引。
uint32_t lv_label_get_text_selection_end(const lv_obj_t * obj); //获取选择结束索引。
void lv_label_ins_text(lv_obj_t * obj, uint32_t pos, const char * txt); //插入一个文本到标签。标签文本不能是静态的。
void lv_label_cut_text(lv_obj_t * obj, uint32_t pos, uint32_t cnt); //从标签中删除字符。标签文本不能是静态的。