概览
正在寻找免费的 LVGL 字体模板,或嵌入式 UI 的多语言文本示例?这个 PicoPixel 项目展示了转换后的 LVGL 字体、特定文字系统的字体选择、字号和颜色如何共同组成一个 480 x 480 屏幕。
该模板在一个地方展示多种非拉丁文字系统,包括西里尔文、中文、日文、希腊文、阿拉伯文、韩文、希伯来文、泰文和孟加拉文。当你需要 ESP32 仪表盘、设置屏幕、信息亭 UI、可穿戴菜单或智能设备界面显示翻译标签,而不是只显示英文时,可以把它作为起点。
核心经验很简单:LVGL 字体不像桌面 Web 字体。转换后的 LVGL 字体只包含你选择的字形和字号。对于中文、日文和韩文,通常应只包含 UI 实际会显示的字符,否则缺失字符可能显示为空方框。完整流程请参阅 PicoPixel LVGL 字体使用指南。
包含内容
- 480 x 480 多语言排版屏幕,设计为紧凑的字体测试画布。
- 九个可见文本示例,覆盖西里尔文、中文、日文、希腊文、阿拉伯文、韩文、希伯来文、泰文和孟加拉文。
- 按文字系统命名的标签图层,在图层面板中命名清晰,便于查看每个文本对象属于哪种语言。
- 十个转换后的字体资源,展示真实 LVGL 项目可能需要多个字体家族和字号。
- 无图片依赖,因此项目专注于文本渲染,而不是位图截图。
- 混合字号,包括小型正文标签和更大的展示文字。
- 混合颜色,让每种文字系统在深色背景上都便于检查。
- 画布内字体提醒,指出两条重要规则:选择支持目标语言的字体,并包含 UI 实际使用的字符。
- Create Font 面板示例,展示内置字体、上传、字号预设、
Letters、Asian和高级选项。
资源快照
资源面板显示这是一个聚焦字体的 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 字段中加入界面会显示的精确字符。请包含屏幕上可能出现的每个标签、按钮、菜单项、警告消息、单位和状态字符串。
如果你的 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 字形集要大得多。
创建字体前使用字体预览字段。粘贴你计划渲染的真实 UI 文本。如果预览显示方框,请在导出前切换到支持该语言的字体。
为什么它很适合 LVGL
这个模板有用,是因为它符合 LVGL 在嵌入式硬件上处理字体的真实方式。
- LVGL 字体是转换后的位图资源,因此每个选定字号都会单独生成。
- 只包含选定字形,有助于控制固件体积。
- 特定文字系统字体可以减少缺失字形,尤其适用于非拉丁语言。
- 多个字号可以共存,因此标题、正文标签和小说明都可以使用合适的字体资源。
- 标签仍然可编辑,因此你可以在导出前把示例文本替换为自己的翻译。
- 项目会导出为标准 LVGL 8.x UI 代码,包括标签所需的字体资源。
运行时模式
导出后,你仍然可以从固件更新标签。具体生成的符号名取决于 PicoPixel 对象名称和字体名称,但 LVGL 模式很熟悉:
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 项目,常见流程是:
- 选择 UI 需要支持的语言。
- 为每种文字系统和字号创建兼容的 LVGL 字体。
- 对于中文、日文和韩文,包含 UI 会显示的精确字符。
- 将此模板中的示例标签替换为真实 UI 文本。
- 将 PicoPixel UI 导出为 LVGL C。
- 将导出的 UI 和字体文件加入你的 ESP-IDF、Arduino 或 PlatformIO 项目。
- 在 LVGL 和显示驱动准备好后调用
ui_init()。
分步字体流程请阅读 Working with fonts。关于导入和打开模板,请参阅 How to use PicoPixel templates。
适用场景
当你需要以下内容的清晰起点时,这个模板很适合:
- LVGL 多语言文本示例
- 中文、日文或韩文的 CJK 字体设置
- ESP32 翻译 UI 原型
- 字体转换测试
- 缺失字形调试
- 从右到左和非拉丁文字检查
- 国际化设置屏幕
- 信息亭、可穿戴、仪表盘和智能设备界面