在LVGL中,字体是位图和为了渲染字母的图像所需的其他信息的集合。字体存储在lv_font_t类型的变量中,可以设置于Style的text_font字段,例如:
lv_style_set_text_font(&my_style, LV_STATE_DEFAULT, &lv_font_montserrat_28); /*Set a larger font*/
字体有个bpp(bits per pixel)属性,它的意思是用多少位来描述字体中的一个像素。像素的值决定了像素的不透明度。这样的话,bpp越高,字母的边缘就越光滑。bpp可取的值有1,2,4和8(值越大,质量越好)。
bpp也影响了存储font所用的内存,举例来说,bpp=4与bpp=1相比,内存用量几乎大了4倍。
Unicode support
LVGL支持UTF-8编码的Unicode字符。编写代码的编辑器需要配置保存格式为UTF-8(通常这是默认选项),并且确保lv_conf.h中LV_TXT_ENC设置为了LV_TXT_ENC_UTF8(这也是默认值)。
可以用下面的代码测试配置是否正确:
lv_obj_t * label1 = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text(label1, LV_SYMBOL_OK);
Build-in fonts
有一些内置的不同大小的字体,可以在lv_conf.h用LV_FONT_…宏来使能。
Normal fonts
包含所有的ASCII字符,degree符号(U+00B0),bullet符号(U+2022)和后面的内置符号。
- LV_FONT_MONTSERRAT_12 12像素字体
- LV_FONT_MONTSERRAT_14 14像素字体
- LV_FONT_MONTSERRAT_16 16像素字体
- LV_FONT_MONTSERRAT_18 18像素字体
- LV_FONT_MONTSERRAT_20 20像素字体
- LV_FONT_MONTSERRAT_22 22像素字体
- LV_FONT_MONTSERRAT_24 24像素字体
- LV_FONT_MONTSERRAT_26 26像素字体
- LV_FONT_MONTSERRAT_28 28像素字体
- LV_FONT_MONTSERRAT_30 30像素字体
- LV_FONT_MONTSERRAT_32 32像素字体
- LV_FONT_MONTSERRAT_34 34像素字体
- LV_FONT_MONTSERRAT_36 36像素字体
- LV_FONT_MONTSERRAT_38 38像素字体
- LV_FONT_MONTSERRAT_40 40像素字体
- LV_FONT_MONTSERRAT_42 42像素字体
- LV_FONT_MONTSERRAT_44 44像素字体
- LV_FONT_MONTSERRAT_46 46像素字体
- LV_FONT_MONTSERRAT_48 48像素字体
Special fonts
- LV_FONT_MONTSERRAT_12_SUBPX 和12像素的普通字体一样,但是增加了子像素卷积渲染。
- LV_FONT_MONTSERRAT_28_COMPRESSED 和28像素的普通字体一样,但是增加了用3bpp压缩。
- LV_FONT_DEJAVU_16_PERSIAN_HEBREW 在16像素字体的基础上增加了阿拉伯字母、希伯来字母、波斯字母支持
- LV_FONT_SIMSUN_16_CJK16 在16像素字体的基础上增加了1000+常用中日韩汉字部首补充
- LV_FONT_UNSCII_8 只支持ASCII字符的8像素字体
- LV_FONT_UNSCII_16 只支持ASCII字符的16像素字体
内置字体是全局变量,变量名形如lv_font_montserrat_16。要在style中使用,只需要像上面一样增加一个指向字体的指针。
内置字体的bpp=4,包含ASCII字符,用Montserrat字体。
除了ASCII字符,内置字体中还增加了下列符号:
使用符号的方法如下:
lv_label_set_text(my_label, LV_SYMBOL_OK);
也可以和字符串一起使用:
lv_label_set_text(my_label, LV_SYMBOL_OK "Apply");
或者是几个符号一起使用:
lv_label_set_text(my_label, LV_SYMBOL_OK LV_SYMBOL_WIFI LV_SYMBOL_PLAY);