LVGL Pro使用指南[11] LVGL XML 字体

在 XML 中,字体是外部资源。需要先选择字体引擎,才能在XML文件中引用字体。

注册字体 链接到标题

从文件加载字体 链接到标题

globals.xml<fonts> 中列出要使用的字体文件。<fonts> 中的每个子元素都以字体引擎的名称(<bin><tiny_ttf>)开始,包含一个 name 属性,以及根据所选字体引擎而定的其他属性。当字体从文件加载时,必须将 as_file 设置为 true

示例:

<globals>
    <fonts>
        <bin as_file="false" name="medium" src="path/to/file.ttf" range="0x20-0x7f" symbols="°" size="24"/>
        <tiny_ttf as_file="true" name="big" src_path="path/to/file.ttf" range="0x20-0x7f" size="48"/>
    </fonts>
</globals>

当指定as_file="true"时,系统启动时需要从文件系统加载字体文件,即调用lv_xml_register_font。LVGL Pro Editor在导出代码时会自动生成调用lv_xml_register_font的代码来注册字体。最后只需要在调用<project_name>_init时指定资源路径即可。例如下面是生成的代码:

void ui_assets_init(const char * asset_path)
{
    ui_assets_init_gen(asset_path);

    /* Add your own custom code here if needed */
}

从数据加载字体 链接到标题

当指定as_file="false"时,LVGL Pro Editor会将字体导出为 C 数组 并直接编译进固件:

uint8_t Montserrat_Medium_ttf_data[] = {
0x0,0x1,0x0,0x0,0x0,0x11,0x1,0x0,0x0,0x4,0x0,0x10,0x47,0x44,0x45,0x46,0xb1,0x6c,0xb3,0x5c,0x0,0x2,0x6d,0x14,0x0,0x0,0x2,0x7e,
....}

生成的代码中会通过以下方式注册字体:

lv_font_t * montserrat_18_tiny_ttf_data = lv_tiny_ttf_create_data(Montserrat_Medium_ttf_data, Montserrat_Medium_ttf_data_size, 18);
lv_xml_register_font(NULL, "montserrat_18_tiny_ttf_data", montserrat_18_tiny_ttf_data);

在XML中使用字体 链接到标题

注册字体后,就可以在样式(styles)或 属性中通过其名称进行引用:

<component>
    <api>
        <prop name="title_font" type="font" default="my_font_32"/>
    </api>

    <styles>
        <style name="subtitle" text_font="my_font_24"/>
    </styles>

    <view flex_flow="column">
        <lv_label style_text_font="$title_font" text="Title"/>
        <lv_label text="I'm the subtitle">
            <style name="subtitle"/>
        </lv_label>
    </view>
</component>

字体引擎 链接到标题

<bin> 链接到标题

<bin> 二进制字体引擎,可以引用以下两种来源:

  • ".bin" 字体文件:由 LVGL 的字体转换器从 TTF 文件生成(当 as_file="true" 时)。字体通过 lv_binfont_create 加载。
  • 编译进固件的 lv_font_t 指针(当 as_file="false" 时)。该情况无需加载,直接使用 lv_font_t

<bin> 字体引擎具有以下属性:

  • name:字体名称,用于后续引用。
  • src_path:字体文件路径。
  • size:字体大小(单位:px,例如 "12")。
  • bpp:每像素位数,可选值为 1、2、4 或 8。
  • as_file:若字体为 “.bin” 文件则设为 true;若为 C 语言中的 lv_font_t 则设为 false

LVGL Pro Editor会根据设定的名称生成调用 lv_xml_register_font 来完成字体注册。若 as_file 为:false:则会生成包含 lv_font_t 结构体的 C 文件。为true:则生成一个 “.bin” 文件。

二进制字体引擎支持选择字符子集:

  • range:例如 "0x30-0x39 0x100-0x200" 表示要包含的 Unicode 范围。默认值为 "0x20-0x7F",即标准 ASCII 范围。
  • symbols:要额外添加的字符列表,例如 "°ÁŐÚ"。可与 range 一起使用。默认值为空(不添加额外字符)。

<tiny_ttf> 链接到标题

TinyTTF 字体使用 Tiny TTF Font Engine 引擎(<tiny_ttf>)来加载 TTF 文件或从数据中加载。

必需属性:

  • name:字体名称,用于引用。
  • src_path:字体文件路径。
  • size:字体大小(单位:px,例如 "12")。
  • as_filetruefalse

LVGL Pro Editor会根据名称调用 lv_xml_register_font 注册字体。若 as_filefalse:则生成一个包含原始字体数据的 C 文件。若为true:不会生成额外文件,将直接使用 TTF 文件。

<freetype> 链接到标题

FreeType 字体使用 FreeType Font Engine 引擎(<freetype>)来直接加载 TTF 文件。不支持从数据加载,因此 as_file 总为 true

必需属性:

  • name:字体名称,用于引用。
  • src_path:字体文件路径。
  • size:字体大小(单位:px,例如 "12")。

参考 链接到标题

https://docs.lvgl.io/master/xml/assets/fonts.html