2403572_zh-CN

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

2403572_zh-CN

2403572_zh-CN

GUI Guider 1.10.1 在背景不透明度为 0 时会忽略背景样式属性。

环境

GUI 指南:1.10.1
LVGL:8.3
小部件:按钮
款式部分:LV_PART_MAIN
样式状态:LV_STATE_DEFAULT

问题描述

我在 GUI Guider 1.10.1 中发现了一个可重现的代码生成问题。

当按钮配置了背景颜色,但其背景不透明度设置为 0 时,GUI Guider 不会生成相应的背景颜色属性。

当在运行时动态更改背景不透明度时,这会导致意外行为。

生殖

创建按钮并进行配置:

背景颜色:#F08300
背景不透明度:0

然后生成 LVGL 8.3 代码。

GUI 指南程序生成:

lv_obj_set_style_bg_opa(ui->screen_password_btn_15,
0,
LV_PART_MAIN | LV_STATE_DEFAULT);
但是,配置的背景颜色并未生成:

lv_obj_set_style_bg_color(ui->screen_password_btn_15,
lv_color_hex(0xF08300),
LV_PART_MAIN | LV_STATE_DEFAULT);
测试:仅将背景不透明度从 0 改为 1

我只将背景不透明度从 0 改为 1,而背景颜色保持为 #F08300。

代码重新生成后,GUI Guider 会生成:

lv_obj_set_style_bg_opa(ui->screen_password_btn_15,
1、
LV_PART_MAIN | LV_STATE_DEFAULT);

lv_obj_set_style_bg_color(ui->screen_password_btn_15,
lv_color_hex(0xF08300),
LV_PART_MAIN | LV_STATE_DEFAULT);

lv_obj_set_style_bg_grad_dir(ui->screen_password_btn_15,
LV_GRAD_DIR_NONE,
LV_PART_MAIN | LV_STATE_DEFAULT);
因此,生成的代码取决于背景不透明度是否恰好为 0。

背景不透明度 = 0:
生成 bg_opa
bg_color 未生成

背景不透明度 = 1:
生成 bg_opa
bg_color 已生成
还会生成其他背景属性。

运行时影响

我的应用程序使用背景不透明度来指示当前选定的密码数字。

GUI Guider 中将背景颜色配置为 #F08300,而应用程序仅动态更改背景不透明度。

例如:

lv_obj_set_style_bg_opa(btn,
LV_OPA_COVER,
LV_PART_MAIN | LV_STATE_DEFAULT);
对于初始背景不透明度为 0 的按钮,生成的代码不包含配置的背景颜色。

当应用程序将不透明度从 0 更改为 LV_OPA_COVER 时,按钮将显示 LVGL 主题或默认背景颜色,而不是 GUI Guider 中配置的 #F08300 颜色。

这种行为是:

GUI引导程序配置:
背景颜色 = #F08300
背景不透明度 = 0

生成的代码:
bg_opa = 0
bg_color 未生成

运行时:
bg_opa 已更改为 LV_OPA_COVER

结果:
显示的是默认背景色或主题背景色,而不是 #F08300。

临时解决方案

在应用程序代码中显式设置背景颜色可以解决此问题:

lv_obj_set_style_bg_color(btn,
lv_color_hex(0xF08300),
LV_PART_MAIN | LV_STATE_DEFAULT);

lv_obj_set_style_bg_opa(btn,
LV_OPA_COVER,
LV_PART_MAIN | LV_STATE_DEFAULT);
另一种可能的解决方法是在 GUI Guider 中将背景不透明度设置为 1,因为这会导致 GUI Guider 生成配置的背景颜色。

但是,这会改变初始用户界面状态,因此并不理想。

预期行为

背景颜色和背景不透明度是独立的 LVGL 样式属性。

如果用户明确配置:

背景颜色 = #F08300
背景不透明度 = 0

我希望 GUI Guider 能在生成的代码中保留这两个属性:

lv_obj_set_style_bg_opa(btn,
0,
LV_PART_MAIN | LV_STATE_DEFAULT);

lv_obj_set_style_bg_color(btn,
lv_color_hex(0xF08300),
LV_PART_MAIN | LV_STATE_DEFAULT);
虽然当 bg_opa 为 0 时 bg_color 没有明显的影响,但当应用程序在运行时动态更改 bg_opa 时,它就变得重要了。

当前代码生成行为会丢失在 GUI Guider 中配置的背景颜色信息。

实际行为

GUI Guider 1.10.1 在背景不透明度为 0 时似乎会忽略背景样式属性。

仅将不透明度从 0 改为 1,会导致背景颜色和其他背景属性重新生成。

重现步骤

在 GUI Guider 1.10.1 中创建按钮。

将背景颜色设置为 #F08300。

将背景不透明度设置为0。

生成LVGL 8.3代码。

注意,已生成值为 0 的 lv_obj_set_style_bg_opa。

请注意,未生成颜色为 #F08300 的 lv_obj_set_style_bg_color。

仅将背景不透明度从 0 改为 1。

重新生成代码。

请注意,现在已生成颜色为 #F08300 的 lv_obj_set_style_bg_color。

在运行时,将原始按钮的不透明度更改为 LV_OPA_COVER。

请注意,除非应用程序明确设置了 bg_color,否则配置的背景颜色不会显示。

问题

这是 GUI Guider 1.10.1 中有意为之的代码大小优化,还是代码生成问题?

如果这种优化是有意为之,GUI Guider 能否提供一个选项,在背景不透明度为 0 时保留背景属性?

运行时应用程序通常会动态更改 LVGL 样式属性,因此仅根据其初始不透明度省略 bg_color 可能会导致运行时行为与 UI 配置不同。

Re: GUI Guider 1.10.1 omits background style properties when Background Opacity is 0

你好@zzjgood

感谢你的帖子。

我可以重现您描述的情况。我认为这是一个代码生成问题。如果用户明确配置了背景颜色,即使初始背景不透明度为 0,GUI Guider 也应该保留相应的 bg_color 代码,或者提供一个选项来保留透明对象的背景样式属性。我会将此问题报告给 GUI-Guider 团队,以便他们进一步修复。此外,根据我们的内部升级流程,如果您能提供以下信息,我们将不胜感激:

- 你用的是哪款NXP产品?
- 你的最终应用是什么?

目前实际的变通方法是在应用代码中明确设置背景色和不透明度:

lv_obj_set_style_bg_color(btn,
                          lv_color_hex(0xF08300),
                          LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(btn,
                        LV_OPA_COVER,
                        LV_PART_MAIN | LV_STATE_DEFAULT);


希望它有帮助。

BR

塞莱斯特

Tags (1)
No ratings
Version history
Last update:
Friday
Updated by: