列表(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)
启用此功能。
按键处理¶
列表处理以下按键:
LV_KEY_RIGHT/DOWN 选择下一个按钮
LV_KEY_LEFT/UP 选择上一个按钮
请注意,与往常一样, LV_KEY_ENTER
的状态会转换为 LV_EVENT_PRESSED/PRESSING/RELEASED
等。
所选按钮处于 LV_BTN_STATE_PR/TG_PR
状态。
要手动选择按钮,请使用 lv_list_set_btn_selected(list, btn)
。当列表散焦并再次聚焦时,它将恢复最后选择的按钮。
了解有关 按键 的更多内容。
范例¶
简单的列表¶
上述效果的示例代码:
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