单片机基础知识--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
相关推荐
susplus3 分钟前
【初识ARM】ARM相关基础概念
学习·arm
星栖与芯13 分钟前
LiteOS-M 切换汇编逐行图解(2):指令·异常机制·全景表
stm32·单片机·嵌入式硬件·harmonyos·鸿蒙系统
XiHongShi201614 分钟前
键盘大小写指示器(代替键盘灯)
学习·计算机
斯维赤2 小时前
AI Agent学习之路 | Prompt Engineering(提示词工程)的三板斧核心技巧
人工智能·学习·prompt
xiangyun612 小时前
【408数据结构 08】队列:循环队列判空判满,408年年考,一次讲清
c语言·开发语言·数据结构·c++·算法
xiangyun612 小时前
【408数据结构 06】双链表、循环链表、静态链表
c语言·开发语言·数据结构·c++·算法
fhq_fn_jgd3 小时前
51单片机(串口通信)
单片机·嵌入式硬件
深圳市元恩微科技开发有限公司4 小时前
兆讯恒达(北京兆讯)MH2457 系列 国产屏驱 MCU
单片机
2301_802651084 小时前
imx6ull裸机开发:UART
学习
Logic1014 小时前
C语言/数据结构数组题解:数字列表加一(Plus One)——进位处理与数组扩展
c语言·数据结构·模拟·数组·时间复杂度·算法题·进位