单片机基础知识--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。
相关推荐
爱倒腾的老唐3 小时前
0、元器件——电阻
学习
sunshine22 girl4 小时前
Java学习七 Java 项目实战2-注册业务
java·学习
sunshine22 girl5 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
传奇开心果编程6 小时前
【SwiftUI提高练中学】第8课 网络层架构:拦截器、重试、缓存与离线优先
学习·macos·ui·ios·swiftui
一条破秋裤6 小时前
内核驱动的意义与课程学习规划
学习
Bug收容所7 小时前
学习LangChain day1
学习·langchain·llm·agent
传奇开心果编程7 小时前
【现代声明式UI学与练】第7课 组件通信——父传子、子传父、跨层级通信、状态提升与 Context
学习·flutter·react native·ui·swiftui·android jetpack
我命由我123459 小时前
Photoshop - Photoshop 矢量蒙版
学习·职场和发展·产品运营·求职招聘·职场发展·产品经理·photoshop
女神下凡9 小时前
芯参谋(41):DDR2_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
熊猫钓鱼>_>9 小时前
越顺,越空:当 AI 把学习 “优化“ 到消失
人工智能·学习·ai·llm·agent·ai编程·metaai