ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《LVGL开发指南 V1.0(G4电机开发板专用)》第二十一章 列表部件(lv_list)

《LVGL开发指南 V1.0(G4电机开发板专用)》第二十一章 列表部件(lv_list)

原创 嵌入式/内核开发 作者:正点原子 时间:2026-06-18 09:55:26 0 删除 编辑

第二十一章 列表部件(lv_list)


       列表部件可用于展现多个选项,它在UI设计中广泛应用,例如:文件管理系统、设置菜单、功能菜单,等等。

       本章节将分为以下几个小节:

       21.1 列表部件的组成

       21.2 列表部件的相关知识

       21.3 列表部件API函数

       21.4 列表部件实验


        21.1 列表部件的组成

       列表部件由两个部分组成:

       ① LV_PART_MAIN:主体背景;

       ② LV_PART_SCROLLBAR:滚动条。

       关于部件样式设置的内容,请大家参考6.4.4章节。


        21.2 列表部件的相关知识


       21.2.1 添加列表按钮

       在默认的情况下,列表部件被创建出来后,只有一个矩形背景框,并没有任何的文本和按钮,用户需要自行往列表里面添加按钮,添加按钮的相关函数为lv_list_add_btn。

       接下来,我们以简单示例来理解列表按钮的添加,示例代码如下所示:

void lv_mainstart(void)
{
    lv_obj_t *list = lv_list_create(lv_scr_act());     /* 创建列表 */
    lv_obj_set_width(list, 200);                       /* 设置列表宽度 */
    lv_obj_set_height(list, 150);                      /* 设置列表高度 */
    lv_obj_center(list);
 
    lv_obj_t *btn;
    btn = lv_list_add_btn(list, LV_SYMBOL_FILE, "New");        /* 添加按钮 */
    btn = lv_list_add_btn(list, LV_SYMBOL_DIRECTORY, "Open");  /* 添加按钮 */
}

       在上述的源码中,我们先创建列表部件,然后调用lv_list_add_btn函数添加列表按钮,该函数的第二个形参用于设置图标,第三个形参用于设置按钮的文本。示例代码可以在PC模拟器中运行,效果图如下所示:


图21.2.1.1 添加列表按钮


       上图中,我们添加了两个列表按钮,这两个列表按钮都是具有图标和文本的,如果用户不想显示图标或者文本,则在对应的形参中填入NULL即可。


       21.2.2 设置列表文本

       列表文本主要用于一类按钮的功能提示或按钮分类。用户需要添加列表文本,可调用lv_list_add_text函数进行设置,该函数有两个形参,第一个形参指向列表对象,第二个形参表示设置的文本。

       接下来,我们以简单示例来理解列表文本的设置,示例代码如下所示:

void lv_mainstart(void)
{
    lv_obj_t* list = lv_list_create(lv_scr_act());     /* 创建列表 */
    lv_obj_set_width(list, 200);                       /* 设置列表宽度 */
    lv_obj_set_height(list, 150);                      /* 设置列表高度 */
    lv_obj_center(list);
 
lv_obj_t* btn;
lv_list_add_text(list, "File");        /* 列表添加标签 */                                               
    btn = lv_list_add_btn(list, LV_SYMBOL_FILE, "New");      /* 添加按钮 */
    btn = lv_list_add_btn(list, LV_SYMBOL_DIRECTORY, "Open"); /* 添加按钮 */
}

       在上述源码中,我们创建了列表并为其添加按钮,于此同时,调用lv_list_add_text函数添加列表文本。示例代码可以在PC模拟器中运行,效果图如下所示:


图21.2.1.2 添加列表文本


        21.3 列表部件API函数

       LVGL官方提供了一些与列表部件相关API,如下表所示:


表21.3.1 列表部件相关的API函数


       接下来,我们介绍LVGL列表部件常用的API函数:

       1. lv_list_create函数

       创建列表部件,该函数原型如下所示:

lv_obj_t *lv_list_create(lv_obj_t *parent);

       该函数的形参,如下表所示:


表21.3.2 lv_list_create函数形参描述


       返回值:指向列表部件的指针。

       2. lv_list_add_text函数

       设置列表文本,该函数原型如下所示:

lv_obj_t *lv_list_add_text( lv_obj_t *list, const char *txt);

       该函数的形参,如下表所示:


表21.3.3 lv_list_add_text函数形参描述


       返回值:指向文本的指针。

       3. lv_list_add_btn函数

       设置列表按钮,该函数原型如下所示:

lv_obj_t *lv_list_add_btn( lv_obj_t *list, const char *icon, const char *txt);

       该函数的形参,如下表所示:


表21.3.4 lv_list_add_btn函数形参描述


       返回值:指向按钮的指针。

       4. lv_list_get_btn_text函数

       获取按下的按钮文本,该函数原型如下所示:

const char *lv_list_get_btn_text(lv_obj_t *list, lv_obj_t *btn);

       该函数的形参,如下表所示:


表21.3.5 lv_list_get_btn_text函数形参描述


       返回值:指向文本的指针。


        21.4 列表部件实验


       21.4.1 硬件设计


       1. 例程功能

       本实验主要测试列表部件API函数的使用,实验现象:开机后,屏幕上显示一个列表,用户可以通过KEY0、KEY1切换当前选项。与此同时,LED0闪烁,提示系统正在运行。

       该实验的完整源码,请参考《LVGL例程18 lv_list(列表)》例程,路径:A盘→4,程序源码 →3,扩展例程 →3,LVGL例程。


       21.4.2 软件设计


       21.4.2.1 程序流程图

       本实验的程序流程图,如下图所示:


图21.4.2.1.1 列表部件实验流程图


       21.4.2.2 程序解析

       关于LVGL的用户代码,我们都是在lv_mainstart.c文件中编写的,本实验的源码如下所示:

/**************************** 第一部分 开始 ****************************/
/**
 * @brief  LVGL演示
 * @param  无
 * @return 无
 */
void lv_mainstart(void)
{
    lv_example_list();
}
/**************************** 第一部分 结束 ****************************/
 
/**************************** 第二部分 开始 ****************************/
/**
 * @brief  列表示例
 * @param  无
 * @return 无
 */
static void lv_example_list(void)
{
    lv_group_t *g = lv_group_create();
    lv_group_set_default(g);
    lv_indev_set_group(indev_keypad, g);
    
    /* 创建列表 */
list = lv_list_create(lv_scr_act());
/* 设置列表宽度 */
lv_obj_set_width(list, lv_obj_get_width(lv_scr_act()) * 0.8);  
/* 设置列表高度 */
lv_obj_set_height(list, lv_obj_get_height(lv_scr_act()) * 0.9); 
/* 设置列表的位置 */
lv_obj_center(list);                   
/* 设置字体 */
    lv_obj_set_style_text_font(list, &lv_font_montserrat_16, LV_PART_MAIN); 
 
    /* 为列表添加按钮 */
    lv_list_add_text(list, "File");                       /* 添加列表文本 */
    lv_list_add_btn(list, LV_SYMBOL_FILE, "New");         /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_DIRECTORY, "Open");   /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_SAVE, "Save");        /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Delete");     /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_EDIT, "Edit");        /* 添加按钮 */
    lv_list_add_text(list, "Connectivity");               /* 添加列表文本 */
    lv_list_add_btn(list, LV_SYMBOL_BLUETOOTH, "Bluetooth");  /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_GPS, "Navigation");       /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_USB, "USB");              /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_BATTERY_FULL, "Battery"); /* 添加按钮 */
    lv_list_add_text(list, "Exit");                           /* 添加列表文本 */
    lv_list_add_btn(list, LV_SYMBOL_OK, "Apply");             /* 添加按钮 */
    lv_list_add_btn(list, LV_SYMBOL_CLOSE, "Close");          /* 添加按钮 */
}
/**************************** 第二部分 结束 ****************************/

       上述源码可分为以下两个部分:

       ① lv_mainstart接口函数。在该函数中,我们调用了列表部件相关的示例函数;

       ② 列表的实现。我们创建列表部件,并为列表添加多个按钮。


       21.4.3 下载验证

       把工程编译并下载到我们的开发板中,运行效果如下图所示:


图21.4.3.1 列表部件实验


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70040860/viewspace-3173999/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763808