当前位置: 首页 > news >正文

LVGL -按键介绍 下

4 图标

4.1 内置图标

LVGL 提供了一个很方便的 图标字体 系统,它使用了 lv_label 来显示文本或图标。你可以选择 Font Awesome 或其他图标字体,并将其直接嵌入应用中。LVGL 内建图标字体(如 LV_SYMBOL_*)是可以改变大小的。通过调整 lv_label 的样式和字体大小,可以轻松改变图标的显示大小
#include “lvgl.h”

// 创建带图标的按钮
void create_btn_with_icon(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 150, 50);lv_obj_align(btn, LV_ALIGN_CENTER, 0, 50);// 添加图标(使用 Unicode 字符,比如 Font Awesome 图标)lv_obj_t *label = lv_label_create(btn);lv_label_set_text(label, LV_SYMBOL_WIFI);  // 使用内置的图标符号lv_obj_set_style_text_font(label, &lv_font_montserrat_32, 0);  // 改变为 32px 大小lv_obj_center(label);
}

在这里插入图片描述

4.2 使用图片作为图标

如果你想用自定义图片作为图标(比如 PNG、JPG),你需要将图片转化为 LVGL 支持的格式(例如,LV_IMG_DECLARE)。

🖼 示例:使用图片作为图标
首先,假设你已经有一个图标图片(比如一个 .png 格式的图标),你需要将它转换成 LVGL 支持的格式。

步骤 1:将图片转换为 C 文件
使用 LVGL 的 imageconverter 工具(在 LVGL 官方工具包中)将图标图片转换为 C 代码。然后将这个 C 文件包含到项目中。

步骤 2:加载和显示图标
假设你已经转换了一个 my_icon.c 文件,其中包含了图标的 C 数据。

#include "lvgl.h"
#include "my_icon.c"  // 引入转换后的图片数据文件// 创建一个按钮,并在按钮上显示图标
void create_btn_with_image(void)
{lv_obj_t *btn = lv_btn_create(lv_scr_act());lv_obj_set_size(btn, 150, 50);lv_obj_align(btn, LV_ALIGN_CENTER, 0, 50);// 创建一个图片对象作为图标lv_obj_t *img = lv_img_create(btn);lv_img_set_src(img, &my_icon);  // 使用转换后的图片对象lv_obj_center(img);  // 图片居中
}

4.3 自创 图标字体(如 Font Awesome)

步骤:

  1. 下载图标字体(如 Font Awesome): 你可以从 Font Awesome 官网 或其他图标字体库下载所需的字体文件。

  2. 转换字体为 LVGL 可用的格式: 使用 LVGL 自带的 fontconvert 工具,将字体文件(如 TTF 文件)转换为 LVGL 可用的 C 代码。

fontconvert --size=16 fontawesome.ttf fontawesome_16.c
  1. 将字体文件包含到项目中: 把 fontawesome_16.c 文件添加到你的项目源文件中。

  2. 在 LVGL 中设置字体: 通过 lv_obj_set_style_text_font() 来设置自定义字体。

相关文章:

  • (51单片机)LCD显示红外遥控相关数据(Delay延时函数)(LCD1602教程)(Int0和Timer0外部中断教程)(IR红外遥控模块教程)
  • 大连理工大学选修课——机器学习笔记(5):EMK-Means
  • 《软件设计师》复习笔记(10.1)——算法特性、时间复杂度、递归、分治、动态规划
  • flutter 专题 六十四 在原生项目中集成Flutter
  • 应对过度处方挑战:为药物推荐任务微调大语言模型(Xiangnan He)
  • 4.29[Q]NLP-Exp2
  • pycharm导入同目录下文件未标红但报错ModuleNotFoundError
  • Locate 3D:Meta出品自监督学习3D定位方法
  • 03_Mybatis-Plus LambadaQueryWrapper 表达式爆空指针异常
  • 大数据应用开发和项目实战-Seaborn
  • Python-pandas-操作csv文件(读取数据/写入数据)及csv语法详细分享
  • python + segno 生成个人二维码
  • 模拟频谱分析仪(Linux c++ Qt)
  • Qt:(创建项目)
  • PageOffice在线打开word文件,并实现切换文件
  • 【RustDesk 】中继1:压力测试 Python 版 RustDesk 中继服务器
  • 阿里云 ECS 服务器进阶指南:存储扩展、成本优化与架构设计
  • WPF之RadioButton控件详解
  • AI Agent新范式:FastGPT+MCP协议实现工具增强型智能体构建
  • 【Python学习路线】零基础到项目实战系统
  • 49:49白热化,美参议院对新关税政策产生巨大分歧
  • 强制性国家标准《危险化学品企业安全生产标准化通用规范》发布
  • 湖北鄂州通报4所小学学生呕吐腹泻:供餐企业负责人被采取强制措施
  • 国家卫健委有关负责人就白皮书发布答记者问
  • 宁波市纪委监委通报4起违反中央八项规定精神典型问题
  • 美国清洗政治:一幅残酷新世界的蓝图正在展开