LVGL 主题

LVGL 主题

修改样式的一点个人心得

lvgl的样式众多,本人是记不住的,用的时候可以快速查找即可

  1. 查看官方例子
    查看官方例子可以快速了解组件的基础样式
    在这里插入图片描述

  2. 使用官方的 SquareLineStudio 软件,配置出想要的效果,再生成参考代码

SquareLineStudio 配置界面很是方便,但是奈何UI和其他任务总是分离的不彻底,因此个人习惯只是参考生成的代码,然后利用之前的界面管理工具,为每个界面都创建一个.c文件。

在这里插入图片描述

  1. 参考 lv_theme_default.c 中 theme_apply 函数的相关部分
    在这里插入图片描述
    在这里插入图片描述

在 lv_port_disp_init 函数中会应用默认的主题,这也是为什么创建出控件时会自带样式。

在这里插入图片描述
对对应控件的默认样式进行屏蔽或修改,测试出要修改样式的部分,然后再恢复默认样式,在创建控件后 使用 lv_obj_set_style_xxxx 单独对控件样式进行修改。

通过修改主题,使字体图片选中时反色

有时候需要全局修改某个控件样式,最简单的就是通过主题修改,当然创建控件后进行单独修改也是可以的。

extern const lv_img_dsc_t CS_ImgSignalWifi;
extern const lv_img_dsc_t CS_ImgSignal4g;static lv_style_t s_style_bg_color;
static lv_style_t s_style_list_color;
static lv_style_t s_style_focus_bg_color;
static lv_style_t s_style_focus_img_color;
static lv_style_t s_style_text_selected_color;/*** @brief 聚焦后改变图片状态 从而改变图片颜色* @param e
*/
static void img_focus_event_cb(lv_event_t* e)
{lv_obj_t* btn = lv_event_get_target(e);lv_event_code_t code = lv_event_get_code(e);if (code == LV_EVENT_FOCUSED){for (int i = 0; i < lv_obj_get_child_cnt(btn); i++){lv_obj_t* obj = lv_obj_get_child(btn, i);if (lv_obj_check_type(obj, &lv_img_class)){lv_obj_add_state(obj, LV_STATE_USER_1);}}}else if (code == LV_EVENT_DEFOCUSED){for (int i = 0; i < lv_obj_get_child_cnt(btn); i++){lv_obj_t* obj = lv_obj_get_child(btn, i);if (lv_obj_check_type(obj, &lv_img_class)){lv_obj_clear_state(obj, LV_STATE_USER_1);}}}
}/*Will be called when the styles of the base theme are already addedto add new styles*/
static void new_theme_apply_cb(lv_theme_t* th, lv_obj_t* obj)
{LV_UNUSED(th);/* 配置下拉列表 主题样式 */if (lv_obj_check_type(obj, &lv_dropdown_class)) {lv_obj_add_style(obj, &s_style_bg_color, LV_PART_MAIN | LV_STATE_DEFAULT);lv_obj_add_style(obj, &s_style_focus_bg_color, LV_PART_MAIN | LV_STATE_FOCUS_KEY);lv_obj_add_style(obj, &s_style_focus_bg_color, LV_PART_MAIN | LV_STATE_FOCUSED);}if (lv_obj_check_type(obj, &lv_dropdownlist_class)) {lv_obj_add_style(obj, &s_style_text_selected_color, LV_PART_SELECTED | LV_STATE_CHECKED);lv_obj_add_style(obj, &s_style_list_color, LV_PART_MAIN | LV_STATE_DEFAULT);}/* 配置按键 主题样式 */if (lv_obj_check_type(obj, &lv_btn_class)){/* 选中时样式 */lv_obj_add_style(obj, &s_style_focus_bg_color, LV_PART_MAIN | LV_STATE_FOCUS_KEY);lv_obj_add_style(obj, &s_style_focus_bg_color, LV_PART_MAIN | LV_STATE_FOCUSED);lv_obj_add_style(obj, &s_style_bg_color, LV_PART_MAIN | LV_STATE_DEFAULT);}/* 配置图片 主题样式 */if (lv_obj_check_type(obj, &lv_img_class)){/* LV_STATE_USER_1 时样式  */lv_obj_add_style(obj, &s_style_focus_img_color, LV_PART_MAIN | LV_STATE_USER_1);}
}static lv_obj_t* theme_test(const uint32_t id, void* param)
{lv_obj_t* screen = lv_obj_create(NULL);lv_disp_t* dispp = lv_disp_get_default();lv_theme_t* theme = lv_theme_default_init(dispp, lv_color_hex(0xffff), lv_color_hex(0xffffff), true, &lv_font_montserrat_14);lv_disp_set_theme(dispp, theme);#if 1lv_style_init(&s_style_bg_color);lv_style_set_bg_color(&s_style_bg_color, lv_color_hex(0x505050));lv_style_set_bg_opa(&s_style_bg_color, 255);lv_style_init(&s_style_list_color);lv_style_set_bg_color(&s_style_list_color, lv_color_hex(0x929495));lv_style_set_bg_opa(&s_style_list_color, 255);lv_style_init(&s_style_focus_bg_color);lv_style_set_bg_color(&s_style_focus_bg_color, lv_color_hex(0xffff));lv_style_set_text_color(&s_style_focus_bg_color, lv_color_hex(0));lv_style_set_text_opa(&s_style_focus_bg_color, LV_OPA_100);lv_style_set_border_width(&s_style_focus_bg_color, 0);lv_style_set_outline_pad(&s_style_focus_bg_color, 0);lv_style_set_outline_width(&s_style_focus_bg_color, 0);lv_style_init(&s_style_focus_img_color);lv_style_set_img_recolor(&s_style_focus_img_color, lv_color_hex(0x0));lv_style_set_img_recolor_opa(&s_style_focus_img_color, LV_OPA_100);lv_style_init(&s_style_text_selected_color);lv_style_set_text_color(&s_style_text_selected_color, lv_color_hex(0));lv_theme_t* th_act = lv_disp_get_theme(NULL);static lv_theme_t th_new;th_new = *th_act;/*Set the parent theme and the style apply callback for the new theme*/lv_theme_set_parent(&th_new, th_act);lv_theme_set_apply_cb(&th_new, new_theme_apply_cb);/*Assign the new theme the the current display*/lv_disp_set_theme(NULL, &th_new);#endiflv_obj_t* dropdown = lv_dropdown_create(screen);lv_dropdown_set_options(dropdown, "Apple\n""Banana\n""Orange\n""Cherry\n""Grape\n""Raspberry\n""Melon\n""Orange\n""Lemon\n""Nuts");lv_obj_align(dropdown, LV_ALIGN_TOP_MID, 0, 100);{lv_obj_t* btn = lv_btn_create(screen);lv_obj_align(btn, LV_ALIGN_TOP_MID, -100, 20);lv_obj_set_size(btn, 100, 40);lv_obj_add_event_cb(btn, img_focus_event_cb, LV_EVENT_ALL, NULL);lv_obj_t* lab = lv_label_create(btn);lv_label_set_text(lab, "btn1");lv_obj_align(lab, LV_ALIGN_RIGHT_MID, 0, 0);lv_obj_t* img = lv_img_create(btn);lv_img_set_src(img, &CS_ImgSignalWifi);lv_obj_align(img, LV_ALIGN_LEFT_MID, 0, 0);}{lv_obj_t* btn = lv_btn_create(screen);lv_obj_align(btn, LV_ALIGN_TOP_MID, 100, 20);lv_obj_set_size(btn, 100, 40);lv_obj_add_event_cb(btn, img_focus_event_cb, LV_EVENT_ALL, NULL);lv_obj_t* lab = lv_label_create(btn);lv_label_set_text(lab, "btn2");lv_obj_align(lab, LV_ALIGN_RIGHT_MID, 0, 0);lv_obj_t* img = lv_img_create(btn);lv_img_set_src(img, &CS_ImgSignal4g);lv_obj_align(img, LV_ALIGN_LEFT_MID, 0, 0);}return screen;
}

请添加图片描述
想要图片选中反色,需要使用.png图片,在官网 转换时转换为带透明通道格式的
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/234647.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Windows】之微软输入法配置小鹤双拼

前言 Windows 自带的输入法微软输入法本身就是个最简洁、最方便的输入法&#xff0c;不需要去安装多余的第三方输入法软件。同时&#xff0c;微软中文拼音输入法支持双拼输入法&#xff0c;但微软自带的双拼输入法不包含小鹤双拼方案的。所以&#xff0c;在这里将会讲解如何配置…

一、数据结构基本概念

数据结构基本概念 一、数据结构基本概念1.基本概念和术语1.1数据&#xff08;Data&#xff09;1.2 数据元素&#xff08;Data element&#xff09;1.3 数据项 &#xff08;Data Item&#xff09;1.4 数据对象 &#xff08;Data Object&#xff09;1.5 数据结构 &#xff08;Dat…

基于JavaWeb+BS架构+SpringBoot+Vue校园一卡通系统的设计和实现

基于JavaWebBS架构SpringBootVue校园一卡通系统的设计和实现 文末获取源码Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 文末获取源码 Lun文目录 第一章 概述 4 1.1 研究背景 4 1.2研究目的及意义 4 1.3国内外发展现状 4 1…

【C语言】指针——从底层原理到应用

C语言指针-从底层原理到花式技巧&#xff0c;用图文和代码帮你讲解透彻 目录 一、前言二、变量与指针的本质 1. 内存地址2. 32位与64位系统3. 变量4. 指针变量5. 操作指针变量 5.1 指针变量自身的值5.2 获取指针变量所指向的数据5.3 以什么样的数据类型来使用/解释指针变量所指…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-4 拉普拉斯变换(Laplace)传递函数、微分方程

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-4 拉普拉斯变换&#xff08;Laplace&#xff09;传递函数、微分方程 1. Laplace Transform 拉式变换2. 收敛域&#xff08;ROC&#xff09;与逆变换&#xff08;ILT&…

自编C++题目——战争

预估难度 困难 题目描述 国与国以河为界&#xff0c;有一天他们两国发生了战争&#xff0c;在边疆的战士开始了厮杀。小明是一个参谋&#xff0c;他也知道两国的兵都能打个人&#xff0c;所以他想让你帮忙安排布置兵&#xff0c;以击杀所有国的兵。 打仗规则 只能打在同一…

线性代数_同济第七版

contents 前言第1章 行列式1.1 二阶与三阶行列式1.1.1 二元线性方程组与二阶行列所式1.1.2 三阶行列式 1.2 全排列和对换1.2.1 排列及其逆序数1.2.2 对换 1.3 n 阶行列式的定义1.4 行列式的性质1.5 行列式按行&#xff08;列&#xff09;展开1.5.1 引理1.5.2 定理1.5.3 推论 * …

debug OpenBLAS library 和 应用示例

1. 构建openblas lib git clone gitgithub.com:OpenMathLib/OpenBLAS.git cd OpenBLAS/ 如果要安装在自定义文件夹中&#xff0c;可以修改 PREFIX 的定义&#xff1a; 将 PREFIX /opt/OpenBLAS 修改成 PREFIX ../local/ 然后构建&#xff1a; make -j make install 如果要…

Unity中BRP下的深度图

文章目录 前言一、在Shader中使用1、在使用深度图前申明2、在片元着色器中 二、在C#脚本中开启摄像机深度图三、最终效果 前言 在之前的文章中&#xff0c;我们实现了URP下的深度图使用。 Unity中URP下使用屏幕坐标采样深度图 在这篇文章中&#xff0c;我们来看一下BRP下深度…

时序预测 | Matlab基于CNN-LSTM-SAM卷积神经网络-长短期记忆网络结合空间注意力机制的时间序列预测(多指标评价)

时序预测 | Matlab基于CNN-LSTM-SAM卷积神经网络-长短期记忆网络结合空间注意力机制的时间序列预测(多指标评价) 目录 时序预测 | Matlab基于CNN-LSTM-SAM卷积神经网络-长短期记忆网络结合空间注意力机制的时间序列预测(多指标评价)预测效果基本介绍程序设计参考资料 预测效果 …

【动态规划】【字符串】C++算法:140单词拆分

作者推荐 【动态规划】【字符串】扰乱字符串 本文涉及的基础知识点 动态规划 字符串 LeetCode140:单词拆分 II 给定一个字符串 s 和一个字符串字典 wordDict &#xff0c;在字符串 s 中增加空格来构建一个句子&#xff0c;使得句子中所有的单词都在词典中。以任意顺序 返回…

LabVIEW在旋转机械故障诊断中的随机共振增强应用

在现代工业自动化领域&#xff0c;准确的故障诊断对于保障机械设备的稳定运行至关重要。传统的故障检测方法往往因噪声干扰而难以捕捉到微弱的故障信号。随着LabVIEW在数据处理和系统集成方面的优势日益凸显&#xff0c;其在旋转机械故障诊断中的应用开始发挥重要作用&#xff…

【linux】更改infiniband卡在Debian系统的网络接口名

在Debian或任何其他基于Linux的系统中&#xff0c;网络接口的名称由udev系统管理。通过创建udev规则&#xff0c;可以修改网络接口名称。以下是更改InfiniBand卡接口名称的一般步骤&#xff1a; 1. 找到网络接口的属性&#xff0c;以编写匹配的udev规则 可以使用udevadm命令查…

IoT 物联网 MQTT 协议 5.0 版本新特性

MQTT 是一种基于发布/订阅模式的轻量级消息传输协议&#xff0c;专门为设备资源有限和低带宽、高延迟的不稳定网络环境的物联网场景应用而设计&#xff0c;可以用极少的代码为联网设备提供实时可靠的消息服务。MQTT 协议广泛应用于智能硬件、智慧城市、智慧农业、智慧医疗、新零…

0-1背包问题-例题

题目摘自《卡码网》46题 题意理解 m种材料——对应m物品 大小问n的行李箱——对应大小为n的背包 所以该问题是一个0-1背包问题&#xff0c;采用动态规划的一般思路来解题。 解题思路&#xff1a; 动规五部曲&#xff1a; &#xff08;1&#xff09;定义二维dp数组&#xff0c;明…

springBoot-自动配置原理

以下笔记内容&#xff0c; 整理自B站黑马springBoot视频&#xff0c;抖音Holis 1、自动配置原理 1.收集Spring开发者的编程习惯&#xff0c;整理开发过程使用的常用技术列表一>(技术集A) 2.收集常用技术(技术集A)的使用参数&#xff0c;整理开发过程中每个技术的常用设置列表…

Python解析参数的三种方法

今天我们分享的主要目的就是通过在 Python 中使用命令行和配置文件来提高代码的效率 Let’s go! 我们以机器学习当中的调参过程来进行实践&#xff0c;有三种方式可供选择。第一个选项是使用 argparse&#xff0c;它是一个流行的 Python 模块&#xff0c;专门用于命令行解析&…

小家电type-c接口PD诱骗

小家电Type-C接口PD诱骗&#xff1a;未来充电的便捷与安全 随着科技的不断发展&#xff0c;Type-C接口已经成为了许多小家电产品的标配。而PD&#xff08;Power Delivery&#xff09;诱骗技术&#xff0c;作为一种新兴的充电技术&#xff0c;更是为小家电产品的充电带来了前所…

Transformer架构和对照代码详解

1、英文架构图 下面图中展示了Transformer的英文架构&#xff0c;英文架构中的模块名称和具体代码一一对应&#xff0c;方便大家对照代码、理解和使用。 2、编码器 2.1 编码器介绍 从宏观⻆度来看&#xff0c;Transformer的编码器是由多个相同的层叠加⽽ 成的&#xff0c;每个…

FreeRTOS——软件定时器

一、什么是定时器 简单可以理解为闹钟&#xff0c;到达指定一段时间后&#xff0c;就会响铃。 STM32 芯片自带硬件定时器&#xff0c;精度较高&#xff0c;达到定时时间后会触发中断&#xff0c;也可以生成 PWM 、输入捕获、输出 比较&#xff0c;等等&#xff0c;功能强大&a…