LVGL最基本的构建一个按钮的函数介绍


1. lv_scr_act()

功能

获取当前活跃的屏幕对象(Screen Object)。

  • LVGL 中所有控件的父容器必须是屏幕或另一个容器,屏幕是根容器。
  • 默认情况下,LVGL 会自动创建一个主屏幕,此函数返回它的指针。
参数
  • 无参数
    直接调用即可,例如:lv_scr_act()
返回值
  • 类型:lv_obj_t*(指向屏幕对象的指针)。
示例
lv_obj_t* screen = lv_scr_act(); // 获取当前屏幕对象

2. lv_switch_create(parent)

功能

创建一个开关控件(Switch Widget)。

  • 开关是 LVGL 提供的交互控件,支持滑动切换状态(开/关)。
参数
  • parent
    类型:lv_obj_t*
    含义:父容器对象,新创建的开关会附加到该容器中。
    常用值:
    • lv_scr_act():附加到当前屏幕。
    • 其他容器(如 lv_obj_create(parent) 创建的面板)。
返回值
  • 类型:lv_obj_t*(指向新创建的开关控件的指针)。
示例
lv_obj_t* parent_container = lv_obj_create(lv_scr_act()); // 创建一个容器
lv_obj_t* switch_obj = lv_switch_create(parent_container); // 将开关添加到容器中

3. lv_obj_set_size(obj, width, height)

功能

设置对象的宽度和高度。

  • 单位默认为像素(px),但可通过 LVGL 配置支持百分比或自适应布局。
参数
  • obj
    类型:lv_obj_t*
    含义:要调整大小的目标对象。

  • width
    类型:lv_coord_t(通常是 int16_t
    含义:对象的宽度(单位:像素)。

  • height
    类型:lv_coord_t
    含义:对象的高度(单位:像素)。

注意事项
  • 默认开关控件较小(如 40x20),需手动调整以适应界面设计。
  • 如果控件内容(如文本、图标)超出尺寸,可能被裁剪。
示例
lv_obj_set_size(switch_obj, 120, 60); // 设置开关为 120x60 像素

4. lv_obj_align(obj, align_type, x_offset, y_offset)

功能

将对象对齐到父容器或指定位置。

  • 对齐基于父容器的边界或中心。
参数
  • obj
    类型:lv_obj_t*
    含义:要对齐的目标对象。

  • align_type
    类型:lv_align_t(枚举类型)
    含义:对齐方式,可选值包括:

    • LV_ALIGN_CENTER:居中对齐。
    • LV_ALIGN_TOP_LEFT:左上角对齐。
    • LV_ALIGN_BOTTOM_RIGHT:右下角对齐。
    • 其他对齐方式(共 12 种,如 LV_ALIGN_LEFT_MID 等)。
  • x_offset
    类型:lv_coord_t
    含义:对齐后的水平偏移量(正值向右,负值向左)。

  • y_offset
    类型:lv_coord_t
    含义:对齐后的垂直偏移量(正值向下,负值向上)。

注意事项
  • 对齐的参考点是父容器的对应位置(如 LV_ALIGN_CENTER 是父容器的中心)。
  • 若父容器大小变化,需重新对齐对象。
示例
// 将开关对齐到父容器中心,并向右偏移 20 像素
lv_obj_align(switch_obj, LV_ALIGN_CENTER, 20, 0);

综合示例

// 获取当前屏幕
lv_obj_t* screen = lv_scr_act();

// 在屏幕上创建一个开关控件
lv_obj_t* switch_obj = lv_switch_create(screen);

// 设置开关尺寸为 120x60 像素
lv_obj_set_size(switch_obj, 120, 60);

// 将开关对齐到屏幕中心
lv_obj_align(switch_obj, LV_ALIGN_CENTER, 0, 0);

扩展说明

  1. 父容器的选择
    父容器可以是屏幕、面板(lv_obj)、布局容器(如 lv_flex/lv_grid)等。
    示例:将开关添加到弹性布局容器:

    lv_obj_t* flex_container = lv_obj_create(lv_scr_act());
    lv_flex_set_flex_flow(flex_container, LV_FLEX_FLOW_ROW); // 设置为横向弹性布局
    lv_switch_create(flex_container); // 开关会自动根据布局排列
    
  2. 动态调整对齐
    如果父容器大小变化(如旋转屏幕),可结合 lv_obj_update_layout(parent)lv_obj_align() 重新对齐对象。

  3. 单位系统
    LVGL 支持配置单位系统(如百分比、毫米),需通过 lv_style_set_width(obj, LV_PCT(50)) 实现。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

九层指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值