3-1-2_标签控件(lv_label)显示中文

标签控件(lv_label)显示中文

介绍

LVGL内置有一个可以显示某些中文字符的字库 CJK字库 我们可以直接使用,这个字库在 lv_conf.h 中定义为:LV_FONT_SIMSUN_16_CJK (\lvgl\src\font\lv_font_simsun_16_cjk.c)。

如果要在lvgl中使用显示自己的中文字库,我们需要用到两个东西:字体文件字体转换器

字体文件我们可以使用开源的字体或者自己制作出来,准备好了字体文件之后使用字体转换器即可转换成可以在lvgl上使用的字体格式。开源字体获取页面:https://lvgl.100ask.net/master/extra/fonts-zh-source.html

准备好字体文件之后就可以通过lvgl官方提供的字体转换器,提取转换你想要的字体,LVGL官方在线字体转换器页面:
https://lvgl.io/tools/fontconverter

如何使用字体转换器?

  1. 为要输出字体命名。例如“lv_font_source_han_sans_bold_20”
  2. 以 px为单位指定高度(字体大小)
  3. 设置bpp (bit-per-piel)。值越高,字体越平滑(抗锯齿)
  4. 选择TTF 或 WOFF 格式字体文件
  5. 设置要包含在字体中的 Unicode 字符范围或在符号字段中列出字符
  6. 可以同时选择多个字体文件转换,并为其指定范围和/或符号。这些字符将被合并转换到同一个文件中。
  7. 单击转换按钮以下载转换出来的 font_source_han_sans_bold_20.c 文件。

Fallback选项是备用字体,如果当前的字体无法找到字符时,lvgl会尝试使用备选方案,如果备选方案中有自己的的备选方案,那么如果条件符合会继续使用备选方案,直到没有设置fallback为止。

文档阅读:https://lvgl.100ask.net/9.1/overview/font.html#use-font-fallback

如何在 LVGL 中使用生成的字体?

  1. 将结果 C 文件复制到你的 LVGL 项目中,并包含到项目;

  2. 在你的项目应用程序的 C 文件中,将字体声明为:

    // 这样声明
    extern lv_font_t my_font_name;
    // 或者这样声明
    LV_FONT_DECLARE(my_font_name);
    
  3. 通过样式中设置字体:

    lv_style_set_text_font(&style_obj, &my_font_name);	// 普通(共享)样式
    lv_obj_set_style_text_font(label, &my_font_name, 0);	// 私有(本地)样式
    

unicode 是统一所有语言的一套编码。
utf-8是基于unicode编码的一种节约字节的编码。

有用的笔记

  1. 用于提取指定字符的Unicode编码工具:https://unicode-table.com

  2. Unicode范围:http://jrgraphix.net/research/unicode.php

  3. 像素完美字体(等宽字体):Terminus

  4. LVGL内置字符列表(lv_font_simsun_16_cjk.c),使用的字体是FontAwesome

    61441,61448,61451,61452,61452,61453,61457,61459,61461,61465,
    61468,61473,61478,61479,61480,61502,61512,61515,61516,61517,
    61521,61522,61523,61524,61543,61544,61550,61552,61553,61556,
    61559,61560,61561,61563,61587,61589,61636,61637,61639,61671,
    61674,61683,61724,61732,61787,61931,62016,62017,62018,62019,
    62020,62087,62099,62212,62189,62810,63426,63650
    
  5. 要了解有关LVGL字体处理的更多信息,请阅读这个指南

  6. 要脱离LVGL使用字体引擎,可以从这里开始:lv_font.c/hlv_font_fmt_txt.c/h

转换器的离线版本可在 GitHub获取

课后思考

  1. 无论是使用lvgl内置的字体还是自己生成的字体,在更新显示内容时整体会有抖动,如何做到不抖动?

文档位置