littleVGL学习笔记6——lv_label标签控件
1.介绍
lv_label 标签控件可以说是 littleVGL 中使⽤最频繁的控件了,他的主要作⽤就是⽤来显⽰⽂本信息的,你可以在运⾏时的任何时候,使⽤lv_label_set_text(label, “New text”)接⼝来动态修改⽂本内容,littleVGL 内部会重新为这个标签重新分配堆空间,当然了你也可以通过
lv_label_set_static_text(label, char_array)这样的接⼝来引⽤⼀个外部的char_array ⽂本指针,这样的好处就是 littleVGL 内部不会为这个⽂本内容分配堆空间,从⽽可以减少内存的使⽤,此标签控件⽀持换⾏,图标字体,部分⽂本重绘⾊等显⽰功能,同时针对长⽂本显⽰,它⽀持6种显⽰模式。
2. lv_label 的 API 接⼝
2.1 主要数据类型
2.1.1 长⽂本模式数据类型
enum{
LV_LABEL_LONG_EXPAND,//⾃动扩展对象的⼤⼩来包裹⽂本内容
//保持对象的宽度不变,当⽂本内容的宽度超过对象的宽度时会
//⾃动换⾏,然后同时⾃动扩展对象的⾼度来包裹⽂本内容的⾼度
LV_LABEL_LONG_BREAK,
//保持对象的⼤⼩不变,当⽂本内容太长显⽰不下时,
//会在⽂本末尾显⽰...三个点的省略号
LV_LABEL_LONG_DOT,
//保持对象的⼤⼩不变,当⽂本内容太长显⽰不下时,会⾃动循环向前向后滚动⽂本
LV_LABEL_LONG_SROLL,
//保持对象的⼤⼩不变,当⽂本内容太长显⽰不下时,会⾃动循环环形滚动⽂本
LV_LABEL_LONG_SROLL_CIRC,
LV_LABEL_LONG_CROP,//保持对象⼤⼩不变,超过的⽂本内容将会被剪切掉
};
typedef uint8_t lv_label_long_mode_t;
2.1.2 ⽂本内容对齐数据类型
enum{
LV_LABEL_ALIGN_LEFT,//⽂本左对齐
LV_LABEL_ALIGN_CENTER,//⽂本居中对齐
LV_LABEL_ALIGN_RIGHT,//⽂本右对齐
};
typedef uint8_t lv_label_align_t;
2.1.3 标签样式数据类型
enum{
LV_LABEL_STYLE_MAIN,
};
typedef uint8_t lv_label_style_t;
2.2 API 接⼝
2.2.1 创建标签
lv_obj_t *lv_label_create(lv_obj_t * par,const lv_obj_t * copy);
参数:
parent: 指向⽗对象
copy: 此参数可选,表⽰创建新对象时,把 copy 对象上的属性值复制过来
返回值:
返回新创建出来的标签对象,如果为 NULL 的话,说明堆空间不⾜了
2.2.2 设置动态⽂本(字符串形式)
void lv_label_set_text(lv_obj_t * label,const char* text);
参数:
label: 标签对象
text: 新的⽂本内容,⽂本内容要是’\0’空字符结尾,如果传 NULL 的话,那么代表刷新当前⽂本内容
2.2.3 设置动态⽂本(数组形式)
void lv_label_set_array_text(lv_obj_t * label,const char* array, uint16_t size);
参数:
label: 标签对象
array: 新的⽂本内容,不需要是’\0’空字符结尾,如果传 NULL 的话,那么代表刷新当前⽂本内容
size: 传⼊的 array 数组的⼤⼩,单位为字节
2.2.4 设置静态⽂本(字符串形式)
void lv_label_set_static_text(lv_obj_t * label,const char* text);
参数:
label: 标签对象
text: 新的⽂本内容,⽂本内容要是’\0’空字符结尾,如果传 NULL 的话,那么代表刷新当前⽂本内容
2.2.5 设置长⽂本模式
text align centervoid lv_label_set_long_mode(lv_obj_t * label, lv_label_long_mode_t long_mode);
参数:
label: 标签对象
long_mode: 长⽂本模式
如果不设置的话 , 那么标签对象的长⽂本模式默认为LV_LABEL_LONG_EXPAND
此处需要注意:lv_label_set_long_mode 的调⽤必须放在lv_obj_set_size 调⽤的前⾯,否则设置的宽和⾼是⽆效的,下⾯看个例⼦:正确的⽅式:
lv_label_set_long_mode(label1,LV_LABEL_LONG_BREAK);
lv_obj_set_size(label1,100,0);//宽度为 100 像素,⾼度是⽆效的,随意设置吧
lv_label_set_text(label1,"Hello CSDN");
错误的⽅式:
lv_obj_set_size(label1,100,0);//宽度为 100 像素,⾼度是⽆效的,随意设置吧
lv_label_set_long_mode(label1,LV_LABEL_LONG_BREAK);
lv_label_set_text(label1,"Hello CSDN");
2.2.6 设置⽂本对齐⽅式
void lv_label_set_align(lv_obj_t * label, lv_label_align_t align);
参数:
label: 标签对象
align: ⽔平⽅向上的⽂本对齐⽅式
记住,要想让标签的⽂本内容具有对齐的效果,那么必须得先保证标签对象具有指定的宽度,请看下⾯例⼦:
lv_obj_t *src =lv_scr_act();//获取屏幕对象
lv_obj_t *label1 =lv_label_create(src,NULL);//创建对象
lv_label_set_long_mode(label1,LV_LABEL_LONG_CROP);//设置长⽂本模式,不能设置为
//LV_LABEL_LONG_EXPAND 模式,因为其指定不了宽度
lv_obj_set_pos(label1,20,20);//设置坐标
lv_obj_set_size(label1,100,50);//设置宽和⾼
lv_label_set_text(label1,"Hello CSDN");//设置⽂本内容
lv_label_set_style(label1,LV_LABEL_STYLE_MAIN,&lv_style_plain_color);//设置具有背景⾊
lv_label_set_body_draw(label1,true);//设置绘制背景
lv_label_set_align(label1,LV_LABEL_ALIGN_CENTER);//设置⽂本居中对齐
2.2.7 是否使能⽂本重绘⾊功能
void lv_label_set_recolor(lv_obj_t * label, bool en);
参数:
label: 标签对象
en: 是否使能
使能之后,可以让标签的部分⽂本显⽰出不同的颜⾊,即⼀个标签⾥可以含有多种不同颜⾊的⽂本,这在其他的 GUI 库中,⼀般是办不到的,使⽤格式为: #⼗六进制颜⾊值 ⽂本# ,注意了颜⾊值和⽂本之间⾄少得有⼀个空格,请看下⾯例⼦(只给出关键代码):
lv_label_set_recolor(label1,true);//先得使能⽂本重绘⾊功能
lv_label_set_text(label1,"#ff0000 red#,#00ff00 green#,#0000ff blue#");//使⽤了 3 次重绘⾊
还有⼀些⽐较简单的 API 接⼝,我这⾥就不列出来了,通过看函数名就能知道⼤概啥意思了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论