LVGL样式继承与层叠规则
一个让我熬夜到凌晨三点的bug
去年做智能家居中控屏项目,UI跑在ESP32-S3上,LVGL 8.3版本。客户要求所有按钮在按下时要有统一的“涟漪效果”,我自然想到在容器父对象上设置样式,子按钮自动继承。结果测试时发现:部分按钮的文本颜色死活不变,有些按钮的背景色却莫名其妙跟着父容器走了。当时盯着逻辑分析仪看了两小时,最后发现是对样式继承的“优先级”理解有偏差——这个坑,今天必须写清楚。
样式继承不是“无脑复制”
LVGL的样式继承机制,和CSS的继承有本质区别。CSS里你给<body>设个color: red,所有子元素文本都变红,除非被覆盖。LVGL里,继承只发生在特定属性上,而且必须显式声明“我要继承”。
看这段代码,我当初就是这么写的:
lv_obj_t*parent=lv_obj_create(lv_scr_act