单片机基础知识--LVGL学习-lv_obj_add_flag()

lv_obj_add_flag()

函数原型

c 复制代码
void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t flag);

头文件 :lvgl.h

  • obj:目标对象指针
  • flag:要设置的对象标志位,可以多个标志位按位或 | 同时传入

所属:LVGL 对象系统,用来给控件添加状态/行为标记,不修改样式,修改对象行为属性。


相关配套函数

c 复制代码
// 添加标志
void lv_obj_add_flag(lv_obj_t * obj, lv_obj_flag_t flag);

// 清除标志
void lv_obj_clear_flag(lv_obj_t * obj, lv_obj_flag_t flag);

// 判断是否拥有该标志
bool lv_obj_has_flag(const lv_obj_t * obj, lv_obj_flag_t flag);

// 切换标志(有就清除,没有就添加)
void lv_obj_toggle_flag(lv_obj_t * obj, lv_obj_flag_t flag);

常用 lv_obj_flag_t 标志(LVGL 9.x)

标志 作用
LV_OBJ_FLAG_HIDDEN 对象隐藏,不再渲染,也不接收输入
LV_OBJ_FLAG_CLICKABLE 对象可点击接收输入事件
LV_OBJ_FLAG_CLICK_FOCUSABLE 点击时获取焦点
LV_OBJ_FLAG_SCROLLABLE 允许对象滚动(容器常用)
LV_OBJ_FLAG_SCROLL_ELASTIC 滚动到边界有弹性回弹效果
LV_OBJ_FLAG_SCROLL_MOMENTUM 滑动松手后惯性滚动
LV_OBJ_FLAG_SCROLL_CHAIN 把滚动传递给父对象
LV_OBJ_FLAG_FLOATING 对象不受父对象裁剪限制,可以绘制到父外面
LV_OBJ_FLAG_OVERFLOW_VISIBLE 子对象超出父边界也绘制出来
LV_OBJ_FLAG_EVENT_BUBBLE 事件向上冒泡到父对象

⚠️区分:

  • lv_obj_flag_t:对象行为标志 ,lv_obj_add_flag()
  • lv_state_t:对象状态 (按下、聚焦、禁用),lv_obj_add_state()

使用示例

1. 隐藏对象

c 复制代码
lv_obj_add_flag(obj, LV_OBJ_FLAG_HIDDEN);   //隐藏
lv_obj_clear_flag(obj, LV_OBJ_FLAG_HIDDEN); //显示

2. 开启容器滚动,弹性+惯性

c 复制代码
lv_obj_add_flag(cont, LV_OBJ_FLAG_SCROLLABLE | 
                       LV_OBJ_FLAG_SCROLL_MOMENTUM | 
                       LV_OBJ_FLAG_SCROLL_ELASTIC);

3. 判断标志

c 复制代码
if(lv_obj_has_flag(obj, LV_OBJ_FLAG_HIDDEN))
{
    //对象处于隐藏
}

关键注意点

  1. 多标志用按位或 |,不是逗号分隔。
  2. LV_OBJ_FLAG_HIDDEN:隐藏后对象完全不参与渲染和输入,不等于设置样式透明度 lv_style_set_opa()
    • HIDDEN:完全消失,不占用渲染
    • opa=0:看不见,但还占位置,还能接收点击事件
  3. LV_OBJ_FLAG_FLOATING / OVERFLOW_VISIBLE:父对象默认会裁剪子控件,想要子控件画到父控件外面,需要开启这两个标志。
  4. flag是对象实例属性,不会继承给子对象,每个对象独立。

容易踩坑

  • 容器滚动不生效:忘记设置 LV_OBJ_FLAG_SCROLLABLE;或者父对象裁剪,子大小没有超过容器大小。
  • 设置透明度看不见控件,但还能点击:只是样式opa为0,没有设置LV_OBJ_FLAG_HIDDEN。
相关推荐
行思理6 小时前
go语言学习难度及适合学习的人群
开发语言·学习·golang
糖糖单片机设计7 小时前
基于 STM32 与中移 OneNet 的智慧电梯监控平台系统
stm32·单片机·嵌入式硬件·51单片机·语音识别
楚山之石10 小时前
【Medical Image Analysis】深度学习医学图像合成综述:伪CT、合成MRI与合成PET的架构、性能与临床边界
图像处理·人工智能·学习·mr·mri
创界工坊工作室10 小时前
55-基于STC89C52宠物智能饲喂控制系统设计
stm32·单片机·嵌入式硬件·51单片机·proteus·宠物
Zwawa10 小时前
编译器工具链:GCC、Clang、MSVC、ICC、armclang
c语言·嵌入式·编译器
学逆向的11 小时前
C 指针常量与常量指针
c语言·开发语言·网络安全
Li_RuiQi11 小时前
DAgger方法演进_独立学习笔记
笔记·学习·计算机视觉
水饺编程11 小时前
第2章:Linux 基础,exit 命令
linux·c语言·汇编
极客 - L U13 小时前
卡尔曼滤波从零到精通
c语言·数据结构·单片机·嵌入式硬件·mcu
SteveSenna14 小时前
aubo学习:realsense手眼标定
学习·机器人·视觉检测