目录

  • 1.label显示图标
  • 2.例程
  • 3.效果

1.label显示图标

void demo_status_bar(void)
{lv_obj_t *window = lv_scr_act();lv_obj_t *status_bar = lv_label_create(window);lv_label_set_text(status_bar, LV_SYMBOL_WIFI LV_SYMBOL_FILE LV_SYMBOL_BATTERY_2); // 刷新显示图标
}


代码很简单
进入到 LV_SYMBOL_WIFI 的定义
发现他就是一个字符串

#define LV_SYMBOL_WIFI            "\xEF\x87\xAB" /*61931, 0xF1EB*/

由此可得,显示图标其实就是显示字符串,对字符串进行裁剪/拼接,就可以实现图标的显示/隐藏(删除)

2.例程

例程的注释写得很明白了,懒得分析了。。。

#include "../../lv_100ask_teach_demos.h"
#include "demo_status_bar.h"#if 1 // 状态栏#include <stdlib.h>
#include <unistd.h>
#include "lvgl/lvgl.h"
#include "lv_drivers/win32drv/win32drv.h"
#include <windows.h>static lv_obj_t *status_bar = NULL;struct status_bar_pos_t
{char pos[4]; // 一个图标其实占3个字节 + '\0'
};// 图标数组(最多显示10个)
static struct status_bar_pos_t status_bar_pos[10] = {{.pos = '\0'},{.pos = '\0'},{.pos = '\0'},{.pos = '\0'},{.pos = '\0'},{.pos = '\0'},{.pos = LV_SYMBOL_USB},{.pos = LV_SYMBOL_SD_CARD},{.pos = LV_SYMBOL_NEW_LINE},{.pos = '\0'},
};#define STATE_PROMPTS_SIZE(_state_prompts) (sizeof(_state_prompts) / sizeof(_state_prompts[0]))static char status_bar_buf[STATE_PROMPTS_SIZE(status_bar_pos) * 4] = {0}; ///*** @brief 向数组插入状态图标* @param {char} *prompts 传入需要显示的图标* @return {*}*/
static void state_prompts_set_prompts(char *prompts)
{// 1.判断图标是否已经存在for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (strcmp(status_bar_pos[i].pos, prompts) == 0){printf("Icon already exists\n");return;}}// 2.在空的位置插入图标for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (status_bar_pos[i].pos != '\0'){strcpy(status_bar_pos[i].pos, prompts);break;}}// 3.扫描数组,将非空的元素复制到 status_bar_buf 中,然后统一显示memset(status_bar_buf, 0, sizeof(status_bar_buf));for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (status_bar_pos[i].pos != '\0'){strcat(status_bar_buf, status_bar_pos[i].pos);}}lv_label_set_text(status_bar, status_bar_buf); // 刷新显示图标
}/*** @brief 从数组中删除图标* @param {char*} prompts 传入要删除的图标* @return {*}*/
static void state_prompts_reset_prompts(char *prompts)
{// 1.判断图标是否已经存在for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (strcmp(status_bar_pos[i].pos, prompts) == 0){printf("Icon already exists\n");// 2.将图标清空memset(status_bar_pos[i].pos, 0, 4);break;}}// 3.扫描数组,将非空的元素复制到 status_bar_buf 中,然后统一显示memset(status_bar_buf, 0, sizeof(status_bar_buf));for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (status_bar_pos[i].pos != '\0'){strcat(status_bar_buf, status_bar_pos[i].pos);}}lv_label_set_text(status_bar, status_bar_buf); // 刷新显示图标
}static void btn_up_event(lv_event_t *e)
{lv_event_code_t code = lv_event_get_code(e);printf("up,%d\n", code);state_prompts_reset_prompts(LV_SYMBOL_WIFI); // 删除 wifi 图标
}static void btn_down_event(lv_event_t *e)
{lv_event_code_t code = lv_event_get_code(e);printf("down,%d\n", code);state_prompts_set_prompts(LV_SYMBOL_WIFI); // 添加 wifi 图标
}void demo_status_bar(void)
{lv_obj_t *window = lv_scr_act();LV_LOG_USER("LVGL initialization completed!");/***********************  加载图片**********************/LV_IMG_DECLARE(ImgBg); // 背景图片/***********************  构造控件**********************/lv_obj_t *btn_up = lv_btn_create(window);lv_obj_t *btn_down = lv_btn_create(window);lv_obj_t *up_label = lv_label_create(btn_up);lv_obj_t *down_label = lv_label_create(btn_down);lv_label_set_text(up_label, "up");lv_label_set_text(down_label, "down");lv_obj_t *background = lv_img_create(window);/***********************  设置参数**********************//*按键参数*/lv_obj_center(up_label); // 按键文本居中lv_obj_center(down_label);lv_obj_align(btn_up, LV_ALIGN_CENTER, 180, -50); // 按键位置lv_obj_align(btn_down, LV_ALIGN_CENTER, 180, 50);lv_obj_set_size(btn_up, 80, 40); // 按键大小lv_obj_set_size(btn_down, 80, 40);lv_obj_add_event_cb(btn_up, btn_up_event, LV_EVENT_CLICKED, background); // 注册按键回调函数lv_obj_add_event_cb(btn_down, btn_down_event, LV_EVENT_CLICKED, background);/* 滚动条 */lv_obj_set_scroll_snap_x(background, LV_SCROLL_SNAP_CENTER);  // 设置滚动方向:Xlv_obj_set_scrollbar_mode(background, LV_SCROLLBAR_MODE_OFF); // 隐藏滚动条/* 设置背景 */static lv_style_t background_style;                     // 构造style对象lv_style_init(&background_style);                       // 初始化stylelv_style_set_width(&background_style, 240);             // 设置宽度lv_style_set_height(&background_style, 240);            // 设置高度lv_style_set_align(&background_style, LV_ALIGN_CENTER); // 设置居中对齐lv_style_set_bg_img_src(&background_style, &ImgBg);     // 设置背景图片lv_obj_add_style(background, &background_style, 0);     // 将style绑定到menu/* 状态栏 */status_bar = lv_label_create(background);static lv_style_t style;lv_style_init(&style);                                             // 样式初始化lv_style_reset(&style);                                            // 重置样式lv_style_set_text_color(&style, lv_palette_main(LV_PALETTE_GREY)); // 设置样式文本颜色lv_style_set_text_letter_space(&style, 8);                         // 设置样式文本字符间隔lv_style_set_text_line_space(&style, 0);                           // 设置样式文本行间距// lv_style_set_text_decor(&style, LV_TEXT_DECOR_UNDERLINE);          // 设置样式文本带下划线lv_obj_add_style(status_bar, &style, 0);             // 绑定样式lv_obj_align(status_bar, LV_ALIGN_TOP_RIGHT, -8, 0); // 图标右上角对齐// 显示图标// 扫描数组,将非空的元素复制到 status_bar_buf 中,然后统一显示memset(status_bar_buf, 0, sizeof(status_bar_buf));for (uint8_t i = 0; i < STATE_PROMPTS_SIZE(status_bar_pos); i++){if (status_bar_pos[i].pos != '\0'){strcat(status_bar_buf, status_bar_pos[i].pos); // 拼接字符串}}lv_label_set_text(status_bar, status_bar_buf); // 刷新显示图标
}#endif

3.效果

Lvgl8 状态栏显示图标(增加/删除)相关推荐

  1. android+状态栏显示图标大全,Android应用图标在状态栏上显示实现原理

    一.前方 在研究<Android类似360,QQ管家那样的悬浮窗>突发奇想,想把应用的图标也显示到状态栏上,类似手机QQ,而有消息来时改变状态栏上的图标显示. 二.原理 其实很研究完后,才 ...

  2. statusbar 尺寸 显示图标_StatusBar 图标展示流程 - 状态栏(StatusBar)镜头布局分析...- git完代码后的异常_169IT.COM...

    本页文章导读: ▪StatusBar 图标展示流程       StatusBar 图标显示流程 StatusBar 图标显示流程  (2010-11-05 15:23:29)转载分类: Androi ...

  3. Android 10 状态栏通知图标和下拉状态栏图标为白色问题

    前言 安装第三方应用,会在状态栏上面和下拉状态栏通知图标显示白色 原因 因为google在android5.0上面做了限制,为了统一系统风格.之后的状态栏icon就不能够随便用一张色彩丰富的图片了,只 ...

  4. 状态栏不显示图标解决方案集锦

    状态栏不显示图标怎么回事?  悬赏分:20 - 解决时间:2008-11-15 23:26 我的电脑每次开机的任务栏中总没图标,比如我上个qq,状态栏中却没有,不小心按个缩小就要关掉再开,很麻烦.比如 ...

  5. Android4.0-4.4 加入支持状态栏显示耳机图标方法(支持带不带MIC的两种耳机自己主动识别)...

    效果如图: 一. 在frameworks/base/packages/SystemUI/res/values/strings.xml 里加入 <string name="headset ...

  6. 计算机 360云盘删除,xp系统下如何删除360云盘显示图标

    使用360云盘的用户们会发现,电脑中360云盘图标总是无处不在,看着非常烦人.那么,我们该怎么删除360云盘显示图标?下面,小编就以xp系统为例,给大家分享xp系统删除360云盘显示图标的方法. 方法 ...

  7. Android 12 悬浮通知/横幅通知状态栏应用图标显示不全

    先看下问题的表现情况吧 这个模块的实现在SystemUI 这里先列举下与这个模块以及本文要描述的相关代码和资源文件,后面逐个分析 SystemUI/src/com/android/systemui/s ...

  8. Android 10.0 SystemUI状态栏显示和隐藏自定义图标

    目录 1.概述 2.SystemUI状态栏显示和隐藏自定义图标的相关功能代码

  9. Android4.4 状态栏WiFi图标显示流程

    1. 状态栏信号图标 1.1 WIFI信号显示 WIFI信号在状态栏的显示如下图所示 当WiFi状态为关闭时,状态栏不会有任何显示.当WiFi状态打开时,会如上图所示,左侧表示有可用WiFi,右侧表示 ...

最新文章

  1. 阮征:互联网金融下的智能客户服务探索
  2. 若使用numba.cuda.jit加速pytorch训练代码会怎样
  3. icd11中文版精神障碍pdf_精神与行为障碍类别目录(ICD-11)
  4. hive 中某个字段等于0_快速了解hive
  5. Python 之 str 、 repr 、 反引号(``)的区别
  6. 求1到20的阶乘之和
  7. [转载]GRADS画图
  8. 快商通智能客服云平台入选中科院《互联网周刊》“智能营销榜”
  9. 俄罗斯方块游戏设计与实现
  10. WPS vbe6ex.olb 不能加载
  11. 潜在数学中 放眼数学外——记中国科学院院士、复旦大学教授李大潜zz
  12. 学习笔记 | Orillusion-WebGPU小白入门(六)
  13. canvas 绘点图
  14. c语言用循环函数求平方,用C语言程序三种循环语句分别编写程序,求1-100的平方值?...
  15. 修改element ui tree 搜索功能,实现分级搜索,关键字高亮
  16. 【错误解决】Ubuntu 配置ibus中文输入法后却不能添加
  17. javaScript:实现倒计时定时器setInterval的开始计时、暂停计时、停止计时效果
  18. 0902 团队销售漏斗
  19. .NET经典图书推荐(下)
  20. java写文件用二进制分割_java分割二进制文件

热门文章

  1. 内网https需要ssl证书_IP地址可以申请SSL证书/https证书吗?
  2. 激光打标在医疗行业中的运用
  3. JS运算符 `=+` 是什么?
  4. 上百个Android开源项目分享 .
  5. java中类可以包含哪些元素,Java类中包含的元素及作用
  6. 哪款计算机可以玩游戏,哪个云电脑配置较高?能用来玩游戏?
  7. 计算机本科毕业论文仓库管理,计算机本科毕业论文例文-20210620012857.docx-原创力文档...
  8. 向日葵的windows账号名
  9. Netty实战,Springboot + netty +websocket 实现推送消息
  10. 微服务负载均衡器Ribbon