列表(lv_list)

概述

列表是从背景 页面(Page) 和其上的 按钮(Buttons) 构建的。按钮包含可选的类似图标的 `图像(Image)`_ (也可以是符号)和 `标签(Label) `_。当列表足够长时,可以滚动它。

零件和样式

列表与 页面(Page) 具有相同的部分

  • LV_LIST_PART_BG

  • LV_LIST_PART_SCRL

  • LV_LIST_PART_SCRLBAR

  • LV_LIST_PART_EDGE_FLASH

有关详细信息,请参见 页面(Page) 部分。

列表上的按钮被视为普通按钮,它们只有一个主要部分,称为 LV_BTN_PART_MAIN

用法

添加按钮

可以使用 lv_list_add_btn(list, &icon_img, "Text") 或符号 lv_list_add_btn(list, SYMBOL_EDIT, "Edit text") 添加新的列表元素(按钮)。如果不想添加图像,请使用 NULL 作为图像源。该函数返回指向创建的按钮的指针,以允许进行进一步的配置。

按钮的宽度根据对象的宽度设置为最大。按钮的高度会根据内容自动调整。 (内容高度+ padding_top + padding_bottom)。

标签以 LV_LABEL_LONG_SROLL_CIRC 长模式创建,以自动循环滚动长标签。

lv_list_get_btn_label(list_btn)lv_list_get_btn_img(list_btn) 可用于获取标签和列表按钮的图像。可以直接使用 lv_list_get_btn_text(list_btn) 来输入文本。

删除按钮

要删除列表元素,请使用 lv_list_remove(list, btn_index) 。可以通过 lv_list_get_btn_index(list, btn) 获得btn_index,其中btn是 lv_list_add_btn() 的返回值。

要清除列表(删除所有按钮),请使用 lv_list_clean(list)

手动导航

可以使用 lv_list_up(list)lv_list_down(list) 在列表中手动导航。

可以使用 lv_list_focus(btn, LV_ANIM_ON/OFF) 直接关注按钮。

上/下/焦点移动的动画时间可以通过以下命令设置: lv_list_set_anim_time(list, anim_time) 。动画时间为零表示不是动画。

布局

默认情况下,列表是垂直的。要获取水平列表,请使用 lv_list_set_layout(list, LV_LAYOUT_ROW_MID)

边缘闪烁

当列表到达最高或最低位置时,可以显示类似圆圈的效果。 lv_list_set_edge_flash(list, true) 启用此功能。

滚动传播

如果列表是在其他可滚动元素(例如 页面(Page) )上创建的,并且列表无法进一步滚动,则滚动可以传播到父级。这样,滚动将在父级上继续。可以通过lv_list_set_scroll_propagation(list,true)启用它

事件

仅支持 通用事件

了解有关 事件 的更多内容。

按键处理

列表处理以下按键:

  • LV_KEY_RIGHT/DOWN 选择下一个按钮

  • LV_KEY_LEFT/UP 选择上一个按钮

请注意,与往常一样, LV_K​​EY_ENTER 的状态会转换为 LV_EVENT_PRESSED/PRESSING/RELEASED 等。

所选按钮处于 LV_BTN_STATE_PR/TG_PR 状态。

要手动选择按钮,请使用 lv_list_set_btn_selected(list, btn) 。当列表散焦并再次聚焦时,它将恢复最后选择的按钮。

了解有关 按键 的更多内容。

范例

简单的列表

http://photos.100ask.net/lvgl/04_widgets/20_list/01_lv_ex_list_1.png

简单的列表

上述效果的示例代码:

 1    #include "../../../lv_examples.h"
 2    #include <stdio.h>
 3    #if LV_USE_LIST
 4
 5    static void event_handler(lv_obj_t * obj, lv_event_t event)
 6    {
 7            if(event == LV_EVENT_CLICKED) {
 8                    printf("Clicked: %s\n", lv_list_get_btn_text(obj));
 9            }
10    }
11
12    void lv_ex_list_1(void)
13    {
14            /*Create a list*/
15            lv_obj_t * list1 = lv_list_create(lv_scr_act(), NULL);
16            lv_obj_set_size(list1, 160, 200);
17            lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);
18
19            /*Add buttons to the list*/
20            lv_obj_t * list_btn;
21
22            list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
23            lv_obj_set_event_cb(list_btn, event_handler);
24
25            list_btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");
26            lv_obj_set_event_cb(list_btn, event_handler);
27
28            list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Delete");
29            lv_obj_set_event_cb(list_btn, event_handler);
30
31            list_btn = lv_list_add_btn(list1, LV_SYMBOL_EDIT, "Edit");
32            lv_obj_set_event_cb(list_btn, event_handler);
33
34            list_btn = lv_list_add_btn(list1, LV_SYMBOL_SAVE, "Save");
35            lv_obj_set_event_cb(list_btn, event_handler);
36
37            list_btn = lv_list_add_btn(list1, LV_SYMBOL_BELL, "Notify");
38            lv_obj_set_event_cb(list_btn, event_handler);
39
40            list_btn = lv_list_add_btn(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
41            lv_obj_set_event_cb(list_btn, event_handler);
42    }
43
44    #endif

相关API

TODO