LVGL 主题

2024-01-10 11:28
文章标签 主题 lvgl

本文主要是介绍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图片,在官网 转换时转换为带透明通道格式的
在这里插入图片描述

这篇关于LVGL 主题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/590640

相关文章

基于Qt实现系统主题感知功能

《基于Qt实现系统主题感知功能》在现代桌面应用程序开发中,系统主题感知是一项重要的功能,它使得应用程序能够根据用户的系统主题设置(如深色模式或浅色模式)自动调整其外观,Qt作为一个跨平台的C++图形用... 目录【正文开始】一、使用效果二、系统主题感知助手类(SystemThemeHelper)三、实现细节

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL

VitePress 自定义主题:打造专属文档网站

VitePress 是一个基于 Vite 和 Vue 3 的静态网站生成器,特别适用于撰写文档。它不仅提供了默认的主题,还允许开发者创建和使用自定义主题,以满足特定的设计和功能需求。本文将详细介绍如何创建、使用及分发 VitePress 自定义主题,并通过实例代码进行演示。 一、创建自定义主题 1. 主题文件结构 要启用自定义主题,你需要在项目根目录下的 .vitepress 文件夹中创建一

ExtJS之实现华丽的皮肤主题更换

extjs的默认皮肤很好看,但是我们还可以变换样式切换其他皮肤.   1.直接添加其他css文件换肤.好多皮肤上网就可以收到的   如皮肤文件:xtheme-olive.zip下载   把皮肤文件解压,把css文件(如xtheme-olive.css)拷贝到extjs的resources目录下css文件夹里面:      2. 解压皮肤文件,把里面的相应的 image文件夹下的目

Kafka【十二】消费者拉取主题分区的分配策略

【1】消费者组、leader和follower 消费者想要拉取主题分区的数据,首先必须要加入到一个组中。 但是一个组中有多个消费者的话,那么每一个消费者该如何消费呢,是不是像图中一样的消费策略呢?如果是的话,那假设消费者组中只有2个消费者或有4个消费者,和分区的数量不匹配,怎么办? 所以这里,我们需要学习Kafka中基本的消费者组中的消费者和分区之间的分配规则: 同一个消费者组的消费者都订

Android style(样式), theme(主题)资源

本文内容摘自《疯狂Android讲义 第三版-李刚著作》 样式和主题资源都用于对Android应用进行“美化”,只要充分利用Android应用的样式和主题资源,开发者就可以开发出各种风格的Android应用。 样式资源(style): 如果我们经常需要对某个类型的组件指定大致相似的格式,比如字体,颜色,背景色等,如果次都要为View组件重复指定这些属性,无疑会有大量的工作量,而且不利于项目后

零成本搞定静态博客——十分钟安装hugo与主题

文章目录 hugo介绍hugo安装与使用方式一:新建站点自建主题方式二:新建站点使用系统推荐的主题 hugo介绍 通过 Hugo 你可以快速搭建你的静态网站,比如博客系统、文档介绍、公司主页、产品介绍等等。相对于其他静态网站生成器来说,Hugo 具备如下特点: 1. 极快的页面编译生成速度。( ~1 ms 每页面) 2. 完全跨平台支持,可以运行在 Mac OS X, Linux

6、LVGL控件-线条、图片、按钮矩阵

本篇文章目录导航 ♠♠ LVGL控件-线条、图片、按钮矩阵 ♣♣♣♣ 一、LVGL 线条部件 ♦♦♦♦♦♦♦♦ 1.1 线条部件组成部分 ♦♦♦♦♦♦♦♦ 1.2 线条部件基本API ♦♦♦♦♦♦♦♦ 1.3 实验小演示 ♣♣♣♣ 二、LVGL 图片部件 ♦♦♦♦♦♦♦♦ 2.1 图片部件组成部分 ♦♦♦♦♦♦♦♦ 2.2 图片部件基本API ♦♦♦♦♦♦♦♦ 2.3 实验小演示(基础操作) ♦

WordPressMIP主题下载,WordPress MIP与百度熊掌号改造接入(V3.4.1)

WordPressMIP主题,是基于熊掌号最新移动端主题,根据百度MIP开发规范升级改造而成,移除冗余代码,完美符合百度MIP规范的一款WordPress移动端主题。   WordPress快速引入百度MIP其实也挺简单,懂代码的人可以直接根据百度MIP官网的规范和验证提示进行原有移动端的改造,不过需要说一点的就是,那些使用自适应的网站引入MIP估计是有点繁琐,甚至基本不太可能,与其改造原