屏幕
480 × 480
Square
屏幕适配
通用
LVGL
8.x
兼容
测试平台
ESP32-P4
maintainer
最后更新
1 周前
字体示例 截图 1当前显示
作者 picopixel
lvgl 字体 esp32 字体 免费模板

概览

正在寻找免费的 LVGL 字体模板,或嵌入式 UI 的多语言文本示例?这个 PicoPixel 项目展示了转换后的 LVGL 字体、特定文字系统的字体选择、字号和颜色如何共同组成一个 480 x 480 屏幕。

该模板在一个地方展示多种非拉丁文字系统,包括西里尔文、中文、日文、希腊文、阿拉伯文、韩文、希伯来文、泰文和孟加拉文。当你需要 ESP32 仪表盘、设置屏幕、信息亭 UI、可穿戴菜单或智能设备界面显示翻译标签,而不是只显示英文时,可以把它作为起点。

核心经验很简单:LVGL 字体不像桌面 Web 字体。转换后的 LVGL 字体只包含你选择的字形和字号。对于中文、日文和韩文,通常应只包含 UI 实际会显示的字符,否则缺失字符可能显示为空方框。完整流程请参阅 PicoPixel LVGL 字体使用指南

包含内容

  • 480 x 480 多语言排版屏幕,设计为紧凑的字体测试画布。
  • 九个可见文本示例,覆盖西里尔文、中文、日文、希腊文、阿拉伯文、韩文、希伯来文、泰文和孟加拉文。
  • 按文字系统命名的标签图层,在图层面板中命名清晰,便于查看每个文本对象属于哪种语言。
  • 十个转换后的字体资源,展示真实 LVGL 项目可能需要多个字体家族和字号。
  • 无图片依赖,因此项目专注于文本渲染,而不是位图截图。
  • 混合字号,包括小型正文标签和更大的展示文字。
  • 混合颜色,让每种文字系统在深色背景上都便于检查。
  • 画布内字体提醒,指出两条重要规则:选择支持目标语言的字体,并包含 UI 实际使用的字符。
  • Create Font 面板示例,展示内置字体、上传、字号预设、LettersAsian 和高级选项。

资源快照

资源面板显示这是一个聚焦字体的 PicoPixel 模板:

  • 图片: 0,预览由可编辑文本对象构成。
  • 颜色: 0,颜色直接应用到设计中的标签。
  • 字体: 10,足以展示多种文字系统、字号和字体家族。
  • 控件: 0,让示例聚焦于文本和字体资源。

可见字体资源包括:

  • Gothic A1 48
  • M PLUS 1p 60
  • Noto Sans Arabic 32
  • Noto Sans Bengali 32
  • Noto Sans Cyrillic 48
  • Noto Sans SC 32
  • Noto Sans Thai Bold 32
  • Open Sans Greek 48
  • Open Sans Hebrew 48

截图中的列表可以滚动,因此项目中还有一个未显示的字体资源。重要模式是:每种文字系统都使用实际包含所需字形的字体。

图层结构

图层面板像语言检查清单一样设置。在 Screen 1 下,每个标签都按它演示的文字系统或语言命名:

  • Cyrillic - RU
  • Chinese
  • Japanese
  • Greek
  • Arabic
  • Korean
  • Hebrew
  • Thai-na
  • Bengali

这种结构让文件适合作为参考。如果某种语言渲染正确,你可以检查对应标签、字体资源、字号、颜色和文本值,然后把同样方法复制到自己的 PicoPixel 项目中。

CJK 字体和缺失字形

中文、日文和韩文字体在 LVGL 中需要特别注意,因为完整字符集非常庞大。包含所有可能字形会给嵌入式项目增加数 MB 体积,对小型设备来说通常太大。

对于 CJK 文本,请在 PicoPixel 的 Create Font 面板中使用 Asian 选项,然后在 Symbols 字段中加入界面会显示的精确字符。请包含屏幕上可能出现的每个标签、按钮、菜单项、警告消息、单位和状态字符串。

WARNING

如果你的 UI 后续显示了创建字体时未包含的中文、日文或韩文字符,LVGL 可能会渲染空方框而不是该字符。当翻译文本变化时,请更新 Symbols 字段并重新创建字体。

详细步骤在 Working with fonts 中,尤其是关于中文、日文和韩文的部分。

为每种文字系统选择字体

并不是每个字体都支持每种语言。一个拉丁字体可能非常适合英文,却不包含阿拉伯文、希伯来文、泰文、韩文、日文或中文字形。该模板展示了更安全的方法:为要渲染的文字系统使用专门设计的字体家族。

  • 为简体中文使用 Noto Sans SC 或其他支持 CJK 的字体。
  • 为日文文本使用支持日文的字体。
  • 为韩文文本使用支持韩文的字体,例如 Gothic A1 或其他 Hangul 字体。
  • 为阿拉伯文字使用 Noto Sans Arabic
  • 为希伯来文使用 Open Sans Hebrew 或其他支持希伯来文的字体。
  • 为希腊文使用支持希腊文的字体。
  • 为俄语和其他西里尔文本使用支持西里尔文的字体。
  • 为泰文和孟加拉文标签使用支持对应文字的字体。

在 Create Font 面板中,Letters 下拉菜单控制希腊文、西里尔文、希伯来文、阿拉伯文、泰文等非 CJK 文字覆盖范围。Asian 下拉菜单是独立的,因为 CJK 字形集要大得多。

TIP

创建字体前使用字体预览字段。粘贴你计划渲染的真实 UI 文本。如果预览显示方框,请在导出前切换到支持该语言的字体。

为什么它很适合 LVGL

这个模板有用,是因为它符合 LVGL 在嵌入式硬件上处理字体的真实方式。

  • LVGL 字体是转换后的位图资源,因此每个选定字号都会单独生成。
  • 只包含选定字形,有助于控制固件体积。
  • 特定文字系统字体可以减少缺失字形,尤其适用于非拉丁语言。
  • 多个字号可以共存,因此标题、正文标签和小说明都可以使用合适的字体资源。
  • 标签仍然可编辑,因此你可以在导出前把示例文本替换为自己的翻译。
  • 项目会导出为标准 LVGL 8.x UI 代码,包括标签所需的字体资源。

运行时模式

导出后,你仍然可以从固件更新标签。具体生成的符号名取决于 PicoPixel 对象名称和字体名称,但 LVGL 模式很熟悉:

c
lv_label_set_text(ui_status_label, "Settings");
lv_obj_set_style_text_font(ui_status_label, &ui_font_noto_sans_32, 0);

对于翻译文本,请确保导出的字体包含你可能传给 lv_label_set_text 的每一个字符。这对 CJK 字符串以及初始设计画布上不可见的动态状态消息尤其重要。

自定义思路

把它作为免费的 LVGL 排版模板,然后调整成你自己的产品。

  • 将示例问候语替换为真实的翻译 UI 标签。
  • 为界面实际需要的每种文字系统和字号创建一个字体。
  • 导出前减少未使用字号,让固件更小。
  • 使用相同文本布局比较多个字体家族,然后再做选择。
  • 为阿拉伯文、波斯文、希伯来文或其他 RTL 界面添加从右到左的标签。
  • 为语言选择、设置、引导或警报创建单独的翻译屏幕。
  • 实验后使用 Delete Unused Fonts,只保留被引用的字体资源。

导出到你的项目

在 PicoPixel 中打开模板,检查字体资源,把示例标签替换为自己的文本,并在导出前创建任何缺失字体。如果你处理中文、日文或韩文,请在创建字体时把精确 UI 字符串粘贴到 Symbols 字段。

对于 ESP32 项目,常见流程是:

  1. 选择 UI 需要支持的语言。
  2. 为每种文字系统和字号创建兼容的 LVGL 字体。
  3. 对于中文、日文和韩文,包含 UI 会显示的精确字符。
  4. 将此模板中的示例标签替换为真实 UI 文本。
  5. 将 PicoPixel UI 导出为 LVGL C。
  6. 将导出的 UI 和字体文件加入你的 ESP-IDF、Arduino 或 PlatformIO 项目。
  7. 在 LVGL 和显示驱动准备好后调用 ui_init()

分步字体流程请阅读 Working with fonts。关于导入和打开模板,请参阅 How to use PicoPixel templates

适用场景

当你需要以下内容的清晰起点时,这个模板很适合:

  • LVGL 多语言文本示例
  • 中文、日文或韩文的 CJK 字体设置
  • ESP32 翻译 UI 原型
  • 字体转换测试
  • 缺失字形调试
  • 从右到左和非拉丁文字检查
  • 国际化设置屏幕
  • 信息亭、可穿戴、仪表盘和智能设备界面

快速开始

第一次使用 PicoPixel 项目?指南会带你了解如何打开、定制并将这个项目烧录到开发板。

安装指南

PicoPixelio /picopixel-files

在 GitHub 查看源码

分享
链接已复制!
报告 这个项目有什么问题吗?