lv_menu_create
用于创建菜单对象- lv_obj_t * lv_menu_create(lv_obj_t * parent);
- //parent:指向父对象的指针
- //ret:返回创建菜单的句柄,如果失败(例如内存不足),返回 NULL
复制代码 lv_menu_page_create
用于创建菜单页面的函数- lv_obj_t * lv_menu_page_create(lv_obj_t * parent, const char * title);
- //parent:指向父对象的指针
- //title:页面的标题,可以为菜单页面设置一个标题,也可以传入 NULL 来创建一个没有标题的页面
- //ret:指向新创建的菜单页面对象的指针。如果创建成功,返回菜单页面对象的指针;如果失败(例如内存不足),返回 NULL
复制代码 lv_menu_cont_create
用于在 LVGL 的菜单页面中创建一个容器(container),作为子控件的布局载体。该容器通常用于组织菜单项(如标签、按钮等),并支持事件绑定以实现页面跳转等功能- lv_obj_t* lv_menu_cont_create(lv_obj_t* parent_page);
- //parent_page:父级菜单页面对象
- //ret:返回创建的容器对象
复制代码 lv_menu_section_create
用于在菜单页面中创建分区(section)的函数,主要用于组织菜单项的逻辑分组- lv_obj_t* lv_menu_section_create(lv_obj_t* parent_page);
- //parent_page:父级菜单页面对象
- //ret:返回分区对象
复制代码 lv_menu_separator_create
用于在菜单页面中创建分隔线的函数- lv_obj_t* lv_menu_separator_create(lv_obj_t* parent_page);
- //parent_page:父级菜单页面对象
- //ret:返回分隔线对象
复制代码 lv_menu_set_page/lv_menu_set_sidebar_page
用于设置菜单当前显示页面的核心函数,支持主容器和侧边栏容器的页面切换- void lv_menu_set_page(lv_obj_t* menu, lv_obj_t* page); // 设置主容器页面
- void lv_menu_set_sidebar_page(lv_obj_t* menu, lv_obj_t* page); // 设置侧边栏页面
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //page:目标页面对象(通过 lv_menu_page_create() 创建),传入 NULL 可清空当前页面
复制代码 lv_menu_set_mode_header
用于设置菜单标题栏(header)显示模式的函数,通过调整标题栏的位置和滚动行为,可以灵活定制菜单的界面布局- void lv_menu_set_mode_header(lv_obj_t* menu, lv_menu_mode_header_t mode);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- /*
- mode:标题栏模式
- LV_MENU_HEADER_TOP_FIXED:标题栏固定在顶部,不随页面滚动 。
- LV_MENU_HEADER_TOP_UNFIXED:标题栏初始位于顶部,但可随页面滚动移出视图 。
- LV_MENU_HEADER_BOTTOM_FIXED:标题栏固定在底部
- */
复制代码 lv_menu_set_mode_root_back_btn
用于设置菜单根页面返回按钮模式的函数,通过控制返回按钮的显示与交互逻辑,实现多级菜单的导航管理- void lv_menu_set_mode_root_back_btn(lv_obj_t* menu, lv_menu_mode_root_back_btn_t mode);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //mode:模式枚举值:
- //LV_MENU_ROOT_BACK_BTN_DISABLED:禁用返回按钮。
- //LV_MENU_ROOT_BACK_BTN_ENABLED:启用返回按钮
复制代码 lv_menu_set_load_page_event
用于绑定菜单项与页面跳转事件的关键函数,通过将控件(如按钮)与目标页面关联,实现点击后自动切换菜单页面的交互逻辑- void lv_menu_set_load_page_event(
- lv_obj_t* menu, // 菜单对象(通过lv_menu_create创建)
- lv_obj_t* obj, // 触发事件的控件(如按钮、容器)
- lv_obj_t* page // 目标页面(通过lv_menu_page_create创建)
- );
复制代码 lv_menu_get_cur_main_page
用于获取菜单当前显示的主页面对象的函数- lv_obj_t* lv_menu_get_cur_main_page(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:当前主页面对象指针,若菜单未设置页面则返回 NULL
复制代码 lv_menu_get_cur_sidebar_page
用于获取菜单当前显示的侧边栏页面对象的函数- lv_obj_t* lv_menu_get_cur_sidebar_page(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:当前侧边栏页面对象指针,若未设置侧边栏则返回 NULL
复制代码 lv_menu_get_main_header
用于获取菜单对象的主标题栏(header)对象的函数- lv_obj_t* lv_menu_get_main_header(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:主标题栏对象指针,若菜单未初始化或标题栏被隐藏则返回 NULL
复制代码 lv_menu_get_main_header_back_btn
用于获取菜单主标题栏(header)中返回按钮对象的函数- lv_obj_t* lv_menu_get_main_header_back_btn(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:返回按钮对象指针,若未启用返回按钮或标题栏未初始化则返回 NULL
复制代码 lv_menu_get_sidebar_header
用于获取菜单侧边栏标题栏(header)对象的函数- lv_obj_t* lv_menu_get_sidebar_header(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:侧边栏标题栏对象指针,若未设置侧边栏或标题栏被隐藏则返回 NULL
复制代码 lv_menu_get_sidebar_header_back_btn
用于获取菜单侧边栏标题栏(sidebar header)中的返回按钮对象的函数- lv_obj_t* lv_menu_get_sidebar_header_back_btn(lv_obj_t* menu);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //ret:侧边栏返回按钮对象指针,若侧边栏未启用或标题栏未包含返回按钮则返回 NULL
复制代码 lv_menu_back_btn_is_root
用于判断菜单返回按钮是否为根页面返回按钮的函数- bool lv_menu_back_btn_is_root(lv_obj_t* menu, lv_obj_t* btn);
- //menu:菜单对象(通过 lv_menu_create() 创建)
- //btn:待检查的按钮对象
- //ret:按钮是根页面返回按钮则返回 true,否则返回 false
复制代码 lv_menu_clear_history
用于清除菜单导航历史的函数- void lv_menu_clear_history(lv_obj_t* menu);
- //menu:菜单对象(需通过 lv_menu_create() 创建)
复制代码- void lv_example_menu_1(void) // 定义一个函数,用于创建菜单示例
- {
- // 创建一个菜单对象,并将其添加到当前屏幕
- lv_obj_t * menu = lv_menu_create(lv_scr_act());
- // 将菜单对象的大小设置为整个屏幕的分辨率
- lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL));
- // 将菜单对象居中(虽然菜单已经填满屏幕,这一步在这里没有实际效果,但通常用于其他对象时会很有用)
- lv_obj_center(menu);
- // 定义两个指针变量,用于后续创建容器和标签
- lv_obj_t * cont;
- lv_obj_t * label;
- // 创建一个子页面,用于存放隐藏的内容
- lv_obj_t * sub_page = lv_menu_page_create(menu, NULL);
- // 在子页面中创建一个容器
- cont = lv_menu_cont_create(sub_page);
- // 在容器中创建一个标签
- label = lv_label_create(cont);
- // 设置标签的文本内容
- lv_label_set_text(label, "Hello, I am hiding here");
- // 创建一个主页面,用于显示主菜单项
- lv_obj_t * main_page = lv_menu_page_create(menu, NULL);
- // 在主页面中创建一个容器
- cont = lv_menu_cont_create(main_page);
- // 在容器中创建一个标签
- label = lv_label_create(cont);
- // 设置标签的文本内容
- lv_label_set_text(label, "Item 1");
- // 在主页面中创建另一个容器
- cont = lv_menu_cont_create(main_page);
- // 在容器中创建一个标签
- label = lv_label_create(cont);
- // 设置标签的文本内容
- lv_label_set_text(label, "Item 2");
- // 在主页面中创建第三个容器
- cont = lv_menu_cont_create(main_page);
- // 在容器中创建一个标签
- label = lv_label_create(cont);
- // 设置标签的文本内容
- lv_label_set_text(label, "Item 3 (Click me!)");
- // 设置点击该容器时加载的页面为子页面
- lv_menu_set_load_page_event(menu, cont, sub_page);
- // 将主页面设置为菜单的当前页面
- lv_menu_set_page(menu, main_page);
- }
复制代码- // 定义一个枚举类型,用于指定菜单项的构建变体
- enum {
- LV_MENU_ITEM_BUILDER_VARIANT_1, // 第一种变体
- LV_MENU_ITEM_BUILDER_VARIANT_2 // 第二种变体
- };
- // 使用 uint8_t 类型定义一个新类型,用于表示菜单项构建变体
- typedef uint8_t lv_menu_builder_variant_t;
- // 声明事件处理函数,用于处理返回按钮的点击事件
- static void back_event_handler(lv_event_t * e);
- // 声明事件处理函数,用于处理开关的状态变化事件
- static void switch_handler(lv_event_t * e);
- // 定义一个全局变量,用于存储根页面的指针
- lv_obj_t * root_page;
- // 声明辅助函数,用于创建带有文本的菜单项
- static lv_obj_t * create_text(lv_obj_t * parent, const char * icon, const char * txt,
- lv_menu_builder_variant_t builder_variant);
- // 声明辅助函数,用于创建带有滑块的菜单项
- static lv_obj_t * create_slider(lv_obj_t * parent,
- const char * icon, const char * txt, int32_t min, int32_t max, int32_t val);
- // 声明辅助函数,用于创建带有开关的菜单项
- static lv_obj_t * create_switch(lv_obj_t * parent,
- const char * icon, const char * txt, bool chk);
- // 主函数,用于创建菜单示例
- void lv_example_menu_5(void)
- {
- // 创建一个菜单对象,并将其添加到当前屏幕
- lv_obj_t * menu = lv_menu_create(lv_scr_act());
- // 获取菜单对象的背景颜色
- lv_color_t bg_color = lv_obj_get_style_bg_color(menu, 0);
- // 根据背景颜色的亮度调整背景颜色
- if(lv_color_brightness(bg_color) > 127) {
- lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 10), 0);
- }
- else {
- lv_obj_set_style_bg_color(menu, lv_color_darken(lv_obj_get_style_bg_color(menu, 0), 50), 0);
- }
- // 启用根页面的返回按钮
- lv_menu_set_mode_root_back_btn(menu, LV_MENU_ROOT_BACK_BTN_ENABLED);
- // 为菜单对象添加点击事件回调函数
- lv_obj_add_event_cb(menu, back_event_handler, LV_EVENT_CLICKED, menu);
- // 设置菜单对象的大小为整个屏幕
- lv_obj_set_size(menu, lv_disp_get_hor_res(NULL), lv_disp_get_ver_res(NULL));
- // 将菜单对象居中(虽然菜单已经填满屏幕,这一步在这里没有实际效果)
- lv_obj_center(menu);
- // 定义两个指针变量,用于后续创建容器和部分
- lv_obj_t * cont;
- lv_obj_t * section;
- /* 创建子页面 */
- // 创建一个子页面,用于存放机械设置
- lv_obj_t * sub_mechanics_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_mechanics_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个分隔符
- lv_menu_separator_create(sub_mechanics_page);
- // 创建一个部分
- section = lv_menu_section_create(sub_mechanics_page);
- // 在部分中创建滑块,用于设置速度、加速度和重量限制
- create_slider(section, LV_SYMBOL_SETTINGS, "Velocity", 0, 150, 120);
- create_slider(section, LV_SYMBOL_SETTINGS, "Acceleration", 0, 150, 50);
- create_slider(section, LV_SYMBOL_SETTINGS, "Weight limit", 0, 150, 80);
- // 创建一个子页面,用于存放声音设置
- lv_obj_t * sub_sound_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_sound_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个分隔符
- lv_menu_separator_create(sub_sound_page);
- // 创建一个部分
- section = lv_menu_section_create(sub_sound_page);
- // 在部分中创建开关,用于控制声音
- create_switch(section, LV_SYMBOL_AUDIO, "Sound", false);
- // 创建一个子页面,用于存放显示设置
- lv_obj_t * sub_display_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_display_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个分隔符
- lv_menu_separator_create(sub_display_page);
- // 创建一个部分
- section = lv_menu_section_create(sub_display_page);
- // 在部分中创建滑块,用于设置亮度
- create_slider(section, LV_SYMBOL_SETTINGS, "Brightness", 0, 150, 100);
- // 创建一个子页面,用于存放软件信息
- lv_obj_t * sub_software_info_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_software_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个部分
- section = lv_menu_section_create(sub_software_info_page);
- // 在部分中创建文本,显示软件版本信息
- create_text(section, NULL, "Version 1.0", LV_MENU_ITEM_BUILDER_VARIANT_1);
- // 创建一个子页面,用于存放法律信息
- lv_obj_t * sub_legal_info_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_legal_info_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个部分
- section = lv_menu_section_create(sub_legal_info_page);
- // 在部分中创建多个文本项,用于显示长文本内容
- for(uint32_t i = 0; i < 15; i++) {
- create_text(section, NULL,
- "This is a long long long long long long long long long text, if it is long enough it may scroll.",
- LV_MENU_ITEM_BUILDER_VARIANT_1);
- }
- // 创建一个子页面,用于存放关于信息
- lv_obj_t * sub_about_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_about_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个分隔符
- lv_menu_separator_create(sub_about_page);
- // 创建一个部分
- section = lv_menu_section_create(sub_about_page);
- // 在部分中创建文本,用于显示软件和法律信息的入口
- cont = create_text(section, NULL, "Software information", LV_MENU_ITEM_BUILDER_VARIANT_1);
- // 设置点击事件,点击时加载软件信息页面
- lv_menu_set_load_page_event(menu, cont, sub_software_info_page);
- cont = create_text(section, NULL, "Legal information", LV_MENU_ITEM_BUILDER_VARIANT_1);
- // 设置点击事件,点击时加载法律信息页面
- lv_menu_set_load_page_event(menu, cont, sub_legal_info_page);
- // 创建一个子页面,用于存放菜单模式设置
- lv_obj_t * sub_menu_mode_page = lv_menu_page_create(menu, NULL);
- // 设置子页面的水平填充
- lv_obj_set_style_pad_hor(sub_menu_mode_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个分隔符
- lv_menu_separator_create(sub_menu_mode_page);
- // 创建一个部分
- section = lv_menu_section_create(sub_menu_mode_page);
- // 在部分中创建开关,用于控制侧边栏的启用状态
- cont = create_switch(section, LV_SYMBOL_AUDIO, "Sidebar enable", true);
- // 为开关添加事件回调函数,处理开关状态变化
- lv_obj_add_event_cb(lv_obj_get_child(cont, 2), switch_handler, LV_EVENT_VALUE_CHANGED, menu);
- /* 创建根页面 */
- // 创建根页面,标题为 "Settings"
- root_page = lv_menu_page_create(menu, "Settings");
- // 设置根页面的水平填充
- lv_obj_set_style_pad_hor(root_page, lv_obj_get_style_pad_left(lv_menu_get_main_header(menu), 0), 0);
- // 创建一个部分
- section = lv_menu_section_create(root_page);
- // 在部分中创建文本,用于显示机械设置的入口
- cont = create_text(section, LV_SYMBOL_SETTINGS, "Mechanics", LV_MENU_ITEM_BUILDER_VARIANT
复制代码 来源:豆瓜网用户自行投稿发布,如果侵权,请联系站长删除 |