在上一篇问题记录中解决完label中text(图标+英文)文本的居中及彩色变化,链接如下
没想到今天用之前那种方法想搞成图标+中文显示竟然失败了!!!
首先确保C文件是UTF-8编码格式,排除编码格式原因。
附上失败品代码段
lv_obj_t *paraSetlab = lv_label_create(contLEV2,NULL);
lv_obj_set_style(paraSetlab,&stylemonitor_cn);
lv_label_set_recolor(paraSetlab,true); /* 允许文字重新着色 */
lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000 参数监控#");
lv_label_set_long_mode(paraSetlab, LV_LABEL_LONG_BREAK);
lv_obj_set_size(paraSetlab, 320, 32);
lv_label_set_align(paraSetlab,LV_LABEL_ALIGN_CENTER);
lv_obj_set_pos(paraSetlab,0,8);
这样运行后屏幕只会显示个红色心跳图标和一个黑色的字符"c',尝试很多次终于找到原因,代码lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000 参数监控#");中"\uF21E"可以识别为Unicode码,后面的"参数监控"应该也默认识别为Unicode,所以这里会出错。
后面将两者更换位置,即将中文放在前面,图标放在后面,可以正常显示,但是我的目的是将"图标+中文"的方式显示,然后又尝试其它方法。
我们知道LVGL库里面会给一些常用的图标的定义,在lv_symbol_def.h文件中,下附上一些相关图标内容:
#define LV_SYMBOL_AUDIO "\xef\x80\x81" /*61441, 0xF001*/
#define LV_SYMBOL_VIDEO "\xef\x80\x88" /*61448, 0xF008*/
#define LV_SYMBOL_LIST "\xef\x80\x8b" /*61451, 0xF00B*/
#define LV_SYMBOL_OK "\xef\x80\x8c" /*61452, 0xF00C*/
#define LV_SYMBOL_CLOSE "\xef\x80\x8d" /*61453, 0xF00D*/
#define LV_SYMBOL_POWER "\xef\x80\x91" /*61457, 0xF011*/
#define LV_SYMBOL_SETTINGS "\xef\x80\x93" /*61459, 0xF013*/
#define LV_SYMBOL_HOME "\xef\x80\x95" /*61461, 0xF015*/
#define LV_SYMBOL_DOWNLOAD "\xef\x80\x99" /*61465, 0xF019*/
#define LV_SYMBOL_DRIVE "\xef\x80\x9c" /*61468, 0xF01C*/
#define LV_SYMBOL_REFRESH "\xef\x80\xa1" /*61473, 0xF021*/
看到这些突然明白(PS:之前玩过一段时间的EMWIN,当初用的就是XEF显示中文),可以使用另一种方法来实现我的目标,即UTF-8格式的图标+中文;
然后
lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000 参数监控#");
便被我改成了
lv_label_set_text(paraSetlab,"#ff0000 \xef\x88\x9e##000000 参数监控#");
然后,然后,目标就实现了!当然,我觉得应该还有其它方法,等后面发现了再更新。
可能有人会问我,"\uF21E"怎么转换成"\xef\x88\x9e",下面附上个在线转换链接
这是我那个图标转换的过程
又尝试了其它方法,也可以,如下
lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000 参数监控#");
改成
lv_label_set_text(paraSetlab,"#ff0000 \uF21E##000000 /u53C2/u6570/u76D1/u63A7#");
附上转换图
现在想一下,无非是编码格式的区别而已。