Files
lvgl/docs/README_zh.md
T
Gabor Kiss-VamosiandGitHub 237d06943a
Arduino Lint / lint (push) Canceled after 0s
Build Examples with C++ Compiler / build-examples (push) Canceled after 0s
MicroPython CI / Build esp32 port (push) Canceled after 0s
MicroPython CI / Build rp2 port (push) Canceled after 0s
MicroPython CI / Build stm32 port (push) Canceled after 0s
MicroPython CI / Build unix port (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_NORMAL_8BIT - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_SDL - Ubuntu (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_16BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_24BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - cl - Windows (push) Canceled after 0s
C/C++ CI / Build OPTIONS_FULL_32BIT - gcc - Windows (push) Canceled after 0s
C/C++ CI / Build ESP IDF ESP32S3 (push) Canceled after 0s
C/C++ CI / Run tests with 32bit build (push) Canceled after 0s
C/C++ CI / Run tests with 64bit build (push) Canceled after 0s
BOM Check / bom-check (push) Canceled after 0s
Verify GDB constants are up-to-date / verify-gdb-consts (push) Canceled after 0s
Verify the widget property name / verify-property-name (push) Canceled after 0s
Verify code formatting / verify-formatting (push) Canceled after 0s
Compare file templates with file names / template-check (push) Canceled after 0s
Code Generation / Code Generation (push) Canceled after 0s
Build Docs / build-and-deploy (push) Canceled after 0s
Build .deb packages / build (push) Canceled after 0s
Validate pkg-config and CMake config / cmake (linux) (push) Canceled after 0s
Validate pkg-config and CMake config / pkgconfig (linux) (push) Canceled after 0s
Validate pkg-config and CMake config / cmake (linux-3d) (push) Canceled after 0s
Validate pkg-config and CMake config / pkgconfig (linux-3d) (push) Canceled after 0s
Test API JSON generator / Test API JSON (push) Canceled after 0s
Install LVGL using CMake / build-examples (private) (push) Canceled after 0s
Install LVGL using CMake / build-examples (public) (push) Canceled after 0s
Check Makefile / Build using Makefile (push) Canceled after 0s
Check Makefile for UEFI / Build using Makefile for UEFI (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/benchmark_results_comment/test.sh) (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/filter_docker_logs/test.sh) (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Script Check (scripts/perf/tests/serialize_results/test.sh) (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark 32b - lv_conf_perf32b (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark 64b - lv_conf_perf64b (push) Canceled after 0s
Emulated Performance Test / ARM Emulated Benchmark - Save PR Number (push) Canceled after 0s
Performance Tests CI / Perf Tests OPTIONS_TEST_PERF_32B - Ubuntu (push) Canceled after 0s
Performance Tests CI / Perf Tests OPTIONS_TEST_PERF_64B - Ubuntu (push) Canceled after 0s
Port repo release update / run-release-branch-updater (push) Canceled after 0s
Static Checks / Static Checks (push) Canceled after 0s
Verify Font License / verify-font-license (push) Canceled after 0s
Verify Kconfig / verify-kconfig (push) Canceled after 0s
Hardware Performance Test / Hardware Performance Benchmark (push) Canceled after 0s
Hardware Performance Test / HW Benchmark - Save PR Number (push) Canceled after 0s
docs(readme): update the README (#10378)
2026-07-25 22:00:41 +02:00

15 KiB
Raw Blame History

文档论坛博客服务 spacer EN中文日本語한국어PTעברית

轻量级多功能图形库



采用矢量图形的电动自行车演示   带动画 3D 模型的心电图演示



概述功能特性LVGL Pro示例集成参与贡献许可证

概述

LVGL 是一个免费的开源 UI 库,让你能够为任何厂商、任何平台上的任何 MCU 和 MPU 创建图形用户界面。

需求条件:LVGL 没有任何外部依赖,因此可以轻松编译到任何现代目标平台,从小型 MCU 到支持 3D 的多核 Linux MPU 皆可。对于典型的 UI,你只需要约 100kB RAM、约 200300kB flash,以及相当于屏幕 1/10 大小的缓冲区用于渲染。

广泛采用:芯片厂商(如 NXP、Espressif、Renesas 等)、RTOS 项目(Zephyr、NuttX 等)以及开发板制造商(Riverdi、Seeed Studio、VIEWE、Elecrow 等)都已经集成了 LVGL。如果一块开发板带有显示屏,那么厂商很可能也提供了 LVGL 支持。

专业工具:与其编写 C 代码,你还可以使用 LVGL Pro 来大幅加速并简化 UI 开发。它是一套完整的工具包,包含 Editor、Figma 集成、Online Viewer 和 CLI。它能从 XML 导出纯粹的 LVGL C 代码,没有额外的运行时,也没有隐藏的黑魔法。它对非商业用途和评估用途免费。

开始上手,可以浏览示例、启动一个模拟器项目、探索 LVGL Pro 的 Online Viewer、在 LVGL Pro 中一键编译并在窗口中运行 UI,或者深入阅读我们面向 AI 就绪的文档。只需点击 Ask AI,即可尽情提问!

功能特性

免费、可移植、可扩展

  • 完全可移植的 C(兼容 C++)库,没有任何外部依赖。
  • 可为任何 MCU 或 MPU、任何 (RT)OS 编译。支持 Make、CMake 以及简单的通配(globbing)。
  • 支持单色屏、ePaper、OLED、TFT 显示屏,甚至显示器。显示屏
  • 基于 MIT 许可证发布,因此你也可以轻松将其用于商业项目。
  • 最低仅需 32kB RAM 和 128kB Flash、一个帧缓冲区,以及至少屏幕 1/10 大小的缓冲区用于渲染。
  • 支持 OS、外部内存和 GPU,但并非必需。

控件、样式、布局及更多

  • 30 多种内置控件Button、Label、Slider、Chart、Keyboard、Meter、Arc、Table 等等。
  • 灵活的样式系统,拥有 100 多个样式属性,可在任何状态下定制控件的任何部分。
  • 类似 FlexboxGrid 的布局引擎,可自动地响应式调整控件的尺寸和位置。
  • 数据绑定,可轻松将 UI 与应用程序连接起来。
  • 支持鼠标、触摸板、小键盘、键盘、外部按钮、编码器等输入设备
  • 支持多显示屏

渲染

  • 内置 2D 渲染引擎,支持基本形状、渐变、抗锯齿、不透明度、平滑滚动、盒子阴影和投影阴影、图像变换等。
  • 强大的 3D 渲染引擎,可通过 OpenGL 展示 glTF 模型
  • 支持矢量图形、SVG 和 Lottie。
  • 文本采用 UTF-8 编码渲染,支持 CJK、泰文、印地文、阿拉伯文和波斯文书写系统。
  • 内置对 VG-Lite、Dave2D、NeoChrome、OpenGL 等 GPU 的支持。

LVGL Pro

用 C 构建 UI 效果不错,但随着项目变大,迭代会变慢,也更难保持一致性。LVGL Pro 让你能够可视化地构建可复用的组件和屏幕、即时预览变更,并在一处统一管理数据绑定、翻译、动画和测试。

Pro 导出的是纯粹的 LVGL C 代码:就是你已经在用的那个 LVGL,没有额外的运行时或依赖。它能直接放入现有项目,无需改变你构建或发布的方式。

在 LVGL Pro 编辑器中构建 UI 并实时预览

你可以在浏览器中通过 viewer.lvgl.io 直接试用,无需安装任何东西;也可以下载 Editor 并在免费的 Community 许可证下使用。

LVGL Pro 由四个紧密关联的工具组成:

  1. Editor:LVGL Pro 的核心。一款桌面应用,用于以 XML 构建组件和屏幕,管理数据绑定、翻译、动画、测试等。进一步了解 XML 格式控件
  2. Online Viewer:在浏览器中运行 Editor,打开 GitHub 项目,无需搭建开发环境即可轻松分享。访问 https://viewer.lvgl.io
  3. Figma 插件:一键将 Figma 设计迁移到 LVGL Pro。在这里查看其工作原理。
  4. CLI 工具:在 CI/CD 中生成 C 代码并运行测试。详情见这里

Community 和 Evaluation 层级可免费使用;商业用途请参见许可证

示例

你可以在 https://lvgl.io/docs/open/examples 查看 100 多个 C 和 XML 示例

LVGL Pro 的 Online Viewer 还包含许多教程以及这些相同的示例,你可以进行交互式体验。

作为预告,下面是用 C 和 XML 编写的同一个简单 UI:

一个居中的按钮,点击时会打印

static void button_clicked_cb(lv_event_t * e)
{
    printf("Clicked\n");
}

/* ... */

lv_obj_t * button = lv_button_create(lv_screen_active());
lv_obj_center(button);
lv_obj_add_event_cb(button, button_clicked_cb,
                    LV_EVENT_CLICKED, NULL);

lv_obj_t * label = lv_label_create(button);
lv_label_set_text(label, "Hello from LVGL!");
<screen>
  <view>
    <lv_button align="center">
      <event_cb callback="button_clicked_cb" />
      <lv_label text="Hello from LVGL!" />
    </lv_button>
  </view>
</screen>

上面的 XML 正是 LVGL Pro 所使用的:你可视化地构建屏幕,它就会为你生成 C 代码。

集成

LVGL 没有任何外部依赖,因此可以轻松地为任何设备编译。它自带内置驱动,可在众多包管理器和 RTOS 中获取,也很容易移植到任何新设备上。

预集成

内置驱动

LVGL 附带了开箱即用的驱动,因此在常见平台上,你无需自己编写显示和输入处理代码:

  • 模拟器 / 桌面SDL、X11 和 Wayland 窗口,可在 PC 上开发和预览你的 UI。
  • 显示控制器:通用的 MIPI-DBI/SPI LCDILI9341、ST7789 及类似型号),以及厂商控制器,如 ST 的 LTDC 和 NXP 的 eLCDIF
  • 嵌入式 Linuxframebuffer (fbdev)、DRM/KMS、Wayland,以及用于触摸和指针输入的 libinput/evdev。在这里进一步了解。
  • GPU / 加速器VG-Lite、NXP PXP、ThinkSilicon NemaGFX、Arm-2D 和 OpenGL ES

集成文档中查看完整列表和设置指南。

在 LVGL Pro 中

在 LVGL Pro 中,你只需单击一下即可创建开箱即用的纯 UI、VSCode、Zephyr 和 Linux 项目。 image

手动移植

集成 LVGL 非常简单。只需将它放入任何项目,像编译其他文件一样编译它即可。要配置 LVGL,将 lv_conf_template.h 复制为 lv_conf.h,启用开头的 #if 0,并根据需要调整配置。(默认配置通常就够用了。)如果可用,LVGL 也可以配合 Kconfig 使用。

进入项目后,你可以按如下方式初始化 LVGL 并创建显示设备和输入设备:

#include "lvgl/lvgl.h" /*Define LV_LVGL_H_INCLUDE_SIMPLE to include as "lvgl.h"*/

#define TFT_HOR_RES 320
#define TFT_VER_RES 240

static uint32_t my_tick_cb(void)
{
    return my_get_millisec();
}

static void my_flush_cb(lv_display_t * disp, const lv_area_t * area, uint8_t * px_map)
{
    /*Write px_map to the area->x1, area->x2, area->y1, area->y2 area of the
     *frame buffer or external display controller. */

    /* signal LVGL that we're done */
    lv_display_flush_ready(disp);
}

static void my_touch_read_cb(lv_indev_t * indev, lv_indev_data_t * data)
{
   if(my_touch_is_pressed()) {
       data->point.x = touchpad_x;
       data->point.y = touchpad_y;
       data->state = LV_INDEV_STATE_PRESSED;
   } else {
       data->state = LV_INDEV_STATE_RELEASED;
   }
}

void main(void)
{
    my_hardware_init();

    /*Initialize LVGL*/
    lv_init();

    /*Set millisecond-based tick source for LVGL so that it can track time.*/
    lv_tick_set_cb(my_tick_cb);

    /*Create a display where screens and widgets can be added*/
    lv_display_t * display = lv_display_create(TFT_HOR_RES, TFT_VER_RES);

    /*Add rendering buffers to the screen.
     *Here adding a smaller partial buffer assuming 16-bit (RGB565 color format)*/
    static uint8_t buf[TFT_HOR_RES * TFT_VER_RES / 10 * 2]; /* x2 because of 16-bit color depth */
    lv_display_set_buffers(display, buf, NULL, sizeof(buf), LV_DISPLAY_RENDER_MODE_PARTIAL);

    /*Add a callback that can flush the content from `buf` when it has been rendered*/
    lv_display_set_flush_cb(display, my_flush_cb);

    /*Create an input device for touch handling*/
    lv_indev_t * indev = lv_indev_create();
    lv_indev_set_type(indev, LV_INDEV_TYPE_POINTER);
    lv_indev_set_read_cb(indev, my_touch_read_cb);

    /*The drivers are in place; now we can create the UI*/
    lv_obj_t * label = lv_label_create(lv_screen_active());
    lv_label_set_text(label, "Hello world");
    lv_obj_center(label);

    /*Execute the LVGL-related tasks in a loop*/
    while(1) {
        lv_timer_handler();
        my_sleep_ms(5);         /*Wait a little to let the system breathe*/
    }
}

参与贡献

LVGL 是一个开放的项目,非常欢迎大家贡献。贡献的方式有很多,从简单地谈论你的项目、编写示例、改进文档、修复 bug,甚至到在 LVGL 组织下托管你自己的项目。

有关贡献机会的详细说明,请访问文档的参与贡献章节。

已经有数百人在 LVGL 上留下了他们的印记。快来成为其中一员吧!我们在这里等你!🙂

许可证

LVGL 库基于 MIT 许可证发布,因此你可以在开源和商业产品中自由使用它,无需支付任何版税。参见 LICENCE.txt

与 LVGL 捆绑的所有第三方库也都在与 MIT 兼容的许可证下发布,因此你可以放心地使用 LVGL 及其依赖。

LVGL Pro 采用单独的许可授权:

  • CommunityEvaluation 层级对非商业用途免费,非常适合学习、业余项目以及评估这些工具。
  • LVGL Pro 的商业用途需要付费许可证。参见价格与详情