LVGL——列表部件

目录

一、部件组成

二、部件操作

1、创建

2、设置

3、获取

三、项目案例


一、部件组成

主体(LV_PART_MAIN

滚动条(LV_PART_SCROLLBAR)

二、部件操作

1、创建

lv_obj_t   *list = lv_list_create( parent );

2、设置

lv_obj_t   *list = lv_list_create( parent );

lv_list_add_text( list, “Settings" );

lv_obj_t  *btn= lv_list_add_btn( list, LV_SYMBOL_WIFI, “WLAN"); 

3、获取

lv_list_get_btn_text( list, list_btn );

三、项目案例

#include "mygui.h"
#include "lvgl.h"
#include <stdio.h>
#include <stdbool.h>

/* 获取当前活动屏幕的宽高 */
#define scr_act_width() lv_obj_get_width(lv_scr_act())
#define scr_act_height() lv_obj_get_height(lv_scr_act())

static lv_obj_t *list;              /* 定义列表 */
static lv_obj_t *list_label;        /* 定义标签 */

static void list_btn_event_cb(lv_event_t *e)
{
    lv_obj_t *list_btn = lv_event_get_target(e);                                   /* 获取触发源 */

    lv_label_set_text(list_label, lv_list_get_btn_text(list, list_btn));           /* 获取按钮文本并显示 */

    lv_obj_add_state(list_btn, LV_STATE_FOCUS_KEY);                                /* 添加状态(聚焦) */
}

void lv_list(void)
{
    /* 创建左侧矩形背景 */
    lv_obj_t* obj_left = lv_obj_create(lv_scr_act());                               /* 创建一个基础对象 */
    lv_obj_set_width(obj_left, scr_act_width() * 0.7);                              /* 设置宽度 */
    lv_obj_set_height(obj_left, scr_act_height() * 0.9);                            /* 设置高度 */
    lv_obj_align(obj_left, LV_ALIGN_LEFT_MID, 5, 0);                                /* 设置位置 */
    lv_obj_update_layout(obj_left);                                                 /* 手动更新物体的参数 */

    /* 创建右侧矩形背景 */
    lv_obj_t* obj_right = lv_obj_create(lv_scr_act());                              /* 创建一个基础对象 */
    lv_obj_set_width(obj_right, scr_act_width() - lv_obj_get_width(obj_left) - 15); /* 设置宽度 */
    lv_obj_set_height(obj_right, lv_obj_get_height(obj_left));                      /* 设置高度 */
    lv_obj_align_to(obj_right, obj_left, LV_ALIGN_OUT_RIGHT_MID, 5, 0);             /* 设置位置 */
    lv_obj_update_layout(obj_right);                                                /* 手动更新物体的参数 */

    /* 显示当前选项的文本内容 */
    list_label = lv_label_create(obj_right);                                        /* 创建标签 */
    lv_obj_set_width(list_label, lv_obj_get_width(obj_right) - 13);                 /* 设置标签的宽度 */
    lv_obj_align(list_label, LV_ALIGN_TOP_MID, 0, 5);                               /* 设置标签位置 */
    lv_obj_update_layout(list_label);                                               /* 手动更新标签的参数 */
    lv_obj_set_style_text_align(list_label, LV_TEXT_ALIGN_CENTER, LV_PART_MAIN);    /* 设置标签文本对齐方式 */
    lv_label_set_text(list_label, "New");                                           /* 设置标签文本 */
    lv_obj_set_style_text_font(list_label, &lv_font_montserrat_14, LV_PART_MAIN);                     /* 设置标签文本字体 */

    /* 创建列表 */
    list = lv_list_create(obj_left);                                                /* 创建列表 */
    lv_obj_set_width(list, lv_obj_get_width(obj_left) * 0.8);                       /* 设置列表宽度 */
    lv_obj_set_height(list, lv_obj_get_height(obj_left) * 0.9);                     /* 设置列表高度 */
    lv_obj_center(list);                                                            /* 设置列表的位置 */
    lv_obj_set_style_text_font(list, &lv_font_montserrat_14, LV_PART_MAIN);                           /* 设置字体 */

    /* 为列表添加按钮 */
    lv_obj_t* btn;
    lv_list_add_text(list, "File");                                                 /* 添加列表文本 */
    btn = lv_list_add_btn(list, LV_SYMBOL_FILE, "New");                             /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_DIRECTORY, "Open");                       /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_SAVE, "Save");                            /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Delete");                         /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_EDIT, "Edit");                            /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    lv_list_add_text(list, "Connectivity");                                         /* 添加列表文本 */
    btn = lv_list_add_btn(list, LV_SYMBOL_BLUETOOTH, "Bluetooth");                  /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_GPS, "Navigation");                       /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_USB, "USB");                              /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_BATTERY_FULL, "Battery");                 /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    lv_list_add_text(list, "Exit");                                                 /* 添加列表文本 */
    btn = lv_list_add_btn(list, LV_SYMBOL_OK, "Apply");                             /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
    btn = lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Close");                          /* 添加按钮 */
    lv_obj_add_event_cb(btn, list_btn_event_cb, LV_EVENT_CLICKED, NULL);            /* 添加按钮回调 */
}

void my_gui(void)
{
    lv_list();
}
  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
LVGL中实现左右滑动列表可以使用lv_sw的组件。 首先,你需要创建一个父容器,并将该容器设置为滑动容器(lv_sw),将其方向设置为水平滑动。 然后,你需要在该容器中添加一个或多个子容器,每个子容器代表列表中的一个项目。 最后,你可以在每个子容器中添加需要显示的控件,例如文本标签(lv_label)或图像(lv_img)等。 下面是一个示例代码,其中包含了一个滑动容器和三个子容器,每个子容器包含一个文本标签: ```c //创建一个父容器 lv_obj_t *sw = lv_sw_create(lv_scr_act(), NULL); //设置容器方向为水平滑动 lv_sw_set_dir(sw, LV_DIR_HOR); //创建第一个子容器 lv_obj_t *cont1 = lv_cont_create(sw, NULL); lv_obj_set_width(cont1, 100); //设置容器宽度 lv_cont_set_fit(cont1, LV_FIT_TIGHT); //设置容器适应内容大小 lv_cont_set_layout(cont1, LV_LAYOUT_COLUMN_MID); //设置容器布局方式 lv_cont_set_style(cont1, LV_CONT_STYLE_MAIN, &lv_style_transp_tight); //设置容器样式 //在第一个子容器中添加一个文本标签 lv_obj_t *label1 = lv_label_create(cont1, NULL); lv_label_set_text(label1, "Item 1"); //设置标签文本 //创建第二个子容器,添加标签 lv_obj_t *cont2 = lv_cont_create(sw, cont1); //使用第一个子容器作为父容器 lv_obj_set_width(cont2, 100); lv_cont_set_fit(cont2, LV_FIT_TIGHT); lv_cont_set_layout(cont2, LV_LAYOUT_COLUMN_MID); lv_cont_set_style(cont2, LV_CONT_STYLE_MAIN, &lv_style_transp_tight); lv_obj_t *label2 = lv_label_create(cont2, NULL); lv_label_set_text(label2, "Item 2"); //创建第三个子容器,添加标签 lv_obj_t *cont3 = lv_cont_create(sw, cont2); lv_obj_set_width(cont3, 100); lv_cont_set_fit(cont3, LV_FIT_TIGHT); lv_cont_set_layout(cont3, LV_LAYOUT_COLUMN_MID); lv_cont_set_style(cont3, LV_CONT_STYLE_MAIN, &lv_style_transp_tight); lv_obj_t *label3 = lv_label_create(cont3, NULL); lv_label_set_text(label3, "Item 3"); ``` 注意,在实际应用中,你需要根据自己的需求来调整容器和子控件的大小和位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

琪琪猫不会嵌入式

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

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

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

打赏作者

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

抵扣说明:

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

余额充值