littleVGL学习笔记6——lv_label 标签控件
1.介绍 lv_label 标签控件可以说是 littleVGL 中使用最频繁的控件了,他的主要作用就是用来显示文本信息的,你可以在运行时的任何时候,使用lv_label_set_text(label, “New text”)接口来动态修改文本内容,littleVGL 内部会重新为这个标签重新分配堆空间,当然了你也可以通过lv_label_set_static_text(label, char_
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 设置长文本模式
void 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 接口,我这里就不列出来了,通过看函数名就能知道大概啥意思了。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)