ITPub博客

首页 > 嵌入式/内核开发 > 嵌入式/内核开发 > 《LVGL开发指南 V1.0(G4电机开发板专用)》第二十三章 选项卡视图部件(lv_tabview)

《LVGL开发指南 V1.0(G4电机开发板专用)》第二十三章 选项卡视图部件(lv_tabview)

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

第二十三章 选项卡视图部件(lv_tabview)


       选项卡视图部件常用于多页面的切换,它的每一个页面就相当于一个容器,用户可以往里面装入自己需要的内容(例如其他的部件)。

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

       23.1 选项卡视图部件的组成

       23.2 选项卡视图部件的相关知识

       23.3 选项卡视图部件的API函数

       23.4 选项卡视图部件的实验


        23.1 选项卡视图部件的组成

       选项卡视图部件由两个部分组成,示意图如下所示:


图23.1.1 选项卡视图部件的组成部分


       由上图可知,选项卡视图部件由按钮矩阵和主体容器两部分组成,如果用户需要修改这两部分的样式,则必须先获取相应的组成部分。关于部件样式设置的内容,请大家参考6.4.4章节。


        23.2 选项卡视图部件的相关知识


       23.2.1 创建选项卡视图部件

       用户需要创建选项卡视图部件,可调用lv_tabview_create(parent, tab_pos, tab_size)函数,该函数有三个形参,parent形参表示父类,tab_pos形参表示选项卡的方向,tab_size形参表示选项卡的大小。接下来,我们结合示意图,帮助大家理解选项卡方向和大小,示意图如下所示:


图23.2.1.1 选项卡的方向和大小


       注意:在默认情况下,选项卡视图部件被创建出来,它是没有任何选项卡的。


       23.2.2 添加选项卡

       用户需要添加选项卡,可以调用以下函数:

lv_tabview_add_tab(tabview, “tab_name”);                /* 添加选项卡 */

       该函数的第二个形参代表选项卡的名称,当选项卡添加完成后,将会返回一个指向该选项卡的容器的指针,我们可以往这个容器里面添加所需的内容。

       接下来,我们以简单示例来理解选项卡的添加,示例代码如下所示:

void lv_mainstart(void)
{
/* 创建选项卡视图 */
    lv_obj_t* tabview = lv_tabview_create(lv_scr_act(),LV_DIR_TOP,50);  
    lv_obj_t* tab1 = lv_tabview_add_tab(tabview, "Tab 1"); /* 添加选项卡1 */
    lv_obj_t* tab2 = lv_tabview_add_tab(tabview, "Tab 2"); /* 添加选项卡2 */
}

       在上述源码中,我们创建了一个选项卡视图部件,然后调用lv_tabview_add_tab函数添加两个选项卡。示例代码可以在PC模拟器中运行,效果图如下所示:


图23.2.2.1 添加选项卡


       23.2.3 切换选项卡

       用户需要切换选项卡,有以下三种方式:

       ① 直接点击对应选项卡的按钮;

       ② 触摸滑动;

       ③ 调用lv_tabview_set_act(tabview, id, anim_en)函数。

       注意:调用lv_tabview_set_tab_act函数进行选项卡切换时,其id是从0开始的,换言之,0就是第一个选项卡,1为第二个选项卡,以此类推。


       23.2.4 获取部件

       选项卡视图部件是由按钮矩阵和主体容器两部分组成,如果用户需要修改这两部分的样式,则必须先获取相应的组成部分。获取按钮矩阵和主体容器的相关函数分别为:lv_tabview_get_tab_btns(tabview)、lv_tabview_get_content(tabview)。


        23.3 选项卡视图部件的API函数

       LVGL官方提供了一些与选项卡视图部件相关API,如下表所示:


表23.3.1 选项卡部件相关的API函数


       接下来,我们介绍LVGL选项卡部件常用的API函数:

       1. lv_tabview_create函数

       创建选项卡视图部件,其函数原型如下所示:

lv_obj_t *lv_tabview_create(lv_obj_t *parent, lv_dir_t tab_pos, 
        lv_coord_t tab_size);

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


表23.3.2 lv_tabview_create函数形参描述


       返回值:指向选项卡视图部件的指针。

       2. lv_tabview_add_tab函数

       添加选项卡,其函数原型如下所示:

lv_obj_t *lv_tabview_add_tab(lv_obj_t *tv, const char *name);

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


表23.3.3 lv_tabview_add_tab函数形参描述


       返回值:指向选项卡容器对象的指针。

       3. lv_tabview_get_content函数

       获取选项卡容器,其函数原型如下所示:

lv_obj_t *lv_tabview_get_content(lv_obj_t *tv);

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


表23.3.4 lv_tabview_get_content函数形参描述


       返回值:指向选项卡容器对象的指针。

       4. lv_tabview_get_tab_btns函数

       获取选项卡视图的按钮矩阵,其函数原型如下所示:

lv_obj_t *lv_tabview_get_tab_btns(lv_obj_t *tv);

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


表23.3.5 lv_tabview_get_tab_btns函数形参描述


       返回值:选项卡按键矩阵对象。


        23.4 选项卡视图部件的实验


       23.4.1 硬件设计


       1. 例程功能

       本实验主要测试选项卡视图部件API函数的使用,实验现象:开机后,屏幕上会显示一个选项卡,用户可以通过KEY0、KEY1切换选项,通过KEY2确定选中的选项,以浏览不同页面的内容。与此同时,LED0闪烁,提示系统正在运行。

       该实验的完整源码,请参考《LVGL例程20 lv_tabview(选项卡)》例程,路径:A盘→4,程序源码 →3,扩展例程 →3,LVGL例程。


       23.4.2 软件设计


       23.4.2.1 程序流程图

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


图23.4.2.1.1选项卡视图部件实验流程图


       23.4.2.2 程序解析

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

/**************************** 第一部分 开始 ****************************/
/**
 * @brief  LVGL演示
 * @param  无
 * @return 无
 */
void lv_mainstart(void)
{
    lv_example_tabview();
}
/**************************** 第一部分 结束 ****************************/
 
/**************************** 第二部分 开始 ****************************/
/**
 * @brief  选项卡实例
 * @param  无
 * @return 无
 */
static void lv_example_tabview(void)
{
    lv_group_t *g = lv_group_create();
    lv_group_set_default(g);
    lv_indev_set_group(indev_keypad, g);
    
    /*******************   第一部分:选项卡(基础)   *********************/
 
lv_obj_t *tabview = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 
scr_act_height()/6);              /* 创建选项卡 */
lv_obj_set_style_text_font(tabview, &lv_font_montserrat_22,0);/* 设置字体 */
 
    lv_obj_t *tab1 = lv_tabview_add_tab(tabview, "A");     /* 添加选项卡1 */
    lv_obj_t *tab2 = lv_tabview_add_tab(tabview, "B");     /* 添加选项卡2 */
    lv_obj_t *tab3 = lv_tabview_add_tab(tabview, "C");     /* 添加选项卡3 */
 
    lv_obj_t *label1 = lv_label_create(tab1);      /* 创建标签(在选项卡1内) */
    lv_label_set_text(label1, "TAB1");             /* 设置文本内容 */
    lv_obj_center(label1);                         /* 设置位置 */
 
    lv_obj_t *label2 = lv_label_create(tab2);      /* 创建标签(在选项卡2内) */
    lv_label_set_text(label2, "TAB2");             /* 设置文本内容 */
    lv_obj_center(label2);                         /* 设置位置 */
 
    lv_obj_t *label3 = lv_label_create(tab3);      /* 创建标签(在选项卡3内) */
    lv_label_set_text(label3, "TAB3");             /* 设置文本内容 */
    lv_obj_center(label3);                         /* 设置位置 */
 
    /***************   第二部分:选项卡(界面优化)   ****************/
 
    /* 1、按钮 */
    lv_obj_t *btn = lv_tabview_get_tab_btns(tabview);       /* 获取按钮部分 */
 
    /* 未选中的按钮 */
lv_obj_set_style_bg_color(btn, lv_color_hex(0xb7472a), 
LV_PART_ITEMS|LV_STATE_DEFAULT);     /* 设置按钮背景颜色:橙色 */
/* 设置按钮背景透明度 */
    lv_obj_set_style_bg_opa(btn, 200, LV_PART_ITEMS|LV_STATE_DEFAULT); 
lv_obj_set_style_text_color(btn, lv_color_hex(0xf3f3f3), 
LV_PART_ITEMS|LV_STATE_DEFAULT);   /* 设置按钮文本颜色:白色 */
 
    /* 选中的按钮 */
lv_obj_set_style_bg_color(btn, lv_color_hex(0xe1e1e1), 
LV_PART_ITEMS|LV_STATE_CHECKED);   /* 设置按钮背景颜色:灰色 */
/* 设置按钮背景透明度 */
    lv_obj_set_style_bg_opa(btn, 200, LV_PART_ITEMS|LV_STATE_CHECKED);   
lv_obj_set_style_text_color(btn, lv_color_hex(0xb7472a), 
LV_PART_ITEMS|LV_STATE_CHECKED);   /* 设置按钮文本颜色:橙色 */
/* 设置按钮边框宽度为0 */
    lv_obj_set_style_border_width(btn, 0, LV_PART_ITEMS| LV_STATE_CHECKED);   
 
    /* 2、主体 */
lv_obj_t *obj = lv_tabview_get_content(tabview); /* 获取主体部分 */
/* 设置背景颜色:白色 */
lv_obj_set_style_bg_color(obj, lv_color_hex(0xffffff), LV_STATE_DEFAULT); 
/* 设置背景透明度 */
    lv_obj_set_style_bg_opa(obj, 255, LV_STATE_DEFAULT); 
}
/**************************** 第二部分 结束 ****************************/

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

       ① lv_mainstart接口函数。在该函数中,我们调用了选项卡视图部件相关的示例函数;

       ② 选项卡页面切换的实现。我们创建选项卡视图部件,然后添加tab1、tab2和tab3三个页面,最后设置这些页面里的内容并优化其样式。


       23.4.3 下载验证

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


图23.4.3.1 选项卡视图部件实验


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

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

注册时间:2024-08-30

  • 博文量
    588
  • 访问量
    763787