LVGL疑难杂症

LVGL疑难杂症

1、下拉框

下拉框右边箭头显示不正常,框内容显示不正常,下拉后内容显示不正常
// 设置主框显示文字的字体(即选中后显示的那一块)
lv_obj_set_style_text_font(ui->text_font_dropdown,menu_default_font16, LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_style_text_font(ui->text_font_dropdown,&lv_font_montserrat_14, LV_PART_INDICATOR | LV_STATE_DEFAULT);//防止箭头变成方框
// 设置下拉列表中的字体
lv_obj_set_style_text_font(lv_dropdown_get_list(ui->text_font_dropdown), menu_default_font16, LV_PART_MAIN | LV_STATE_DEFAULT);

2、悬浮栏

悬浮工具栏按钮显示异常,发现是父容器内边距导致,将内边距设置0
image

3、Label

设置按钮里面的label希望按钮被checked后变成白色,写了下面的代码
lv_obj_set_style_text_color(uiPrint->setup_reversePrint_closeButtonLabel, lv_color_white(), LV_PART_MAIN | LV_STATE_CHECKED);
实际不起作用,因为是button被checked,label作为子对象不会发生变化,需要在回调单独实现样式变化

4、宕机问题

1、上周移植过程中弹窗死机问题修复,原因是语种没有初始化,词条指针为空导致的
image

传入的inkjet->inkjet_Config->language_datebase[90] 指针为空,立马就死掉,打印都来不及出来
经验:lvgl死机极大概率是因为对象指针异常导致
2、对象没有初始化就操作它导致宕机
image

5、UI样式

父容器设置圆角,子对象超出圆角部分(size范围内)会覆盖父容器的圆角
lv_obj_set_style_clip_corner(ui->scrSetup_Contain, true, 0);
这样设置子对象超出圆角部分裁剪
可以设计出一个圆角,三个直角的按钮
image

6、图层问题

多个容器都创建在 NULL 层,并分别调用了 lv_scr_load(),最后一次调用的那个容器会成为当前活动屏幕并显示出来。
当把最后一个src隐藏后,屏幕显示空白,必须 lv_scr_load()其他scr才能正常显示

1.显示层(Display Layer)
LVGL 渲染的基础层,所有的 UI 对象最终都绘制在显示层上。
2.系统层(System Layer)
LVGL 内部有一个系统层(lv_layer_sys()),是所有屏幕对象的上层。
系统层通常用于显示始终存在的控件,比如弹窗、键盘、提示框等。
系统层 不需要调用 lv_scr_load,它会在渲染周期内自动显示。
3。屏幕对象(Screen Objects)
屏幕对象(lv_obj_create(NULL))是 顶层容器,通常用于显示主界面。
这些屏幕对象 默认不可见,只有通过 lv_scr_load() 显示。
lv_scr_load() 会将某个 screen 设置为当前活动的显示屏。
只会渲染当前活动屏幕中的内容。
4.普通控件(普通对象)
如 lv_btn_create()、lv_label_create()、lv_slider_create() 等,都是屏幕对象的子对象。
这些控件必须放置在某个有效的父对象下,且只有该父对象显示时,它们才会被渲染。
image

7、按键事件LV_EVENT_LONG_PRESSED_REPEAT

当用户按住按钮超过设定的长按时间后,LVGL 会 周期性发送该事件
触发时机:当用户按住按钮超过设定的长按时间后,LVGL 会 周期性发送该事件。
间隔可调:
lv_indev_set_long_press_time(indev, ms) → 多久判定为长按开始(默认 400ms)
lv_indev_set_long_press_repeat_time(indev, ms) → 长按连续触发间隔(默认 300ms)
停止条件:用户松手或失去按压,事件自动停止。

8、强制置顶

lv_obj_move_foreground(inkjet->uiSave->Save_Contain_bg);//强制置顶,覆盖下面menu

9、图层显示问题

Uihome
Counter_Contain_bg_fullscr->全透明背景
Counter_Contain_bg
Counter_Contain
basesel_Contain_bg这样创建LV_OBJ_FLAG_HIDDEN显示不出来

basesel_Contain_bg 创建在uiHome下才显示出来
不知道什么原因,可能与层级的优先级有关

10.按钮样式问题

创建按钮时候这样设置可以在不同状态切换样式
image

11.列表显示问题

列表刷新出来了,数量也对,但是文字没有显示出来,最后发现是字体导致的
image

12.LVGL Group问题

移植利乐风格UI的时候忘记将group部分代码解除注释,导致画布上focus的对象不能通过悬浮工具栏实现放大缩小,也不能修改对象,加日志发现是无法在objlist找到focus的对象,这块放开就正常了
image

13.textarea和按钮size高度一致但是显示比较矮

原因是style将pad设置0导致的,调整下大小让显示高度一致
image

14.宕机

Addr2line结果
image
image

posted @ 2025-12-26 14:15  上善若淼  阅读(3)  评论(0)    收藏  举报