列表(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_KEY_ENTER
的状态会转换为 LV_EVENT_PRESSED/PRESSING/RELEASED
等。
所选按钮处于 LV_BTN_STATE_PR/TG_PR
状态。
要手动选择按钮,请使用 lv_list_set_btn_selected(list, btn)
。当列表散焦并再次聚焦时,它将恢复最后选择的按钮。
了解有关 按键 的更多内容。
范例
简单的列表
上述效果的示例代码:
#include "../../../lv_examples.h"
#include <stdio.h>
#if LV_USE_LIST
static void event_handler(lv_obj_t * obj, lv_event_t event)
{
if(event == LV_EVENT_CLICKED) {
printf("Clicked: %s\n", lv_list_get_btn_text(obj));
}
}
void lv_ex_list_1(void)
{
/*Create a list*/
lv_obj_t * list1 = lv_list_create(lv_scr_act(), NULL);
lv_obj_set_size(list1, 160, 200);
lv_obj_align(list1, NULL, LV_ALIGN_CENTER, 0, 0);
/*Add buttons to the list*/
lv_obj_t * list_btn;
list_btn = lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_DIRECTORY, "Open");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_CLOSE, "Delete");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_EDIT, "Edit");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_SAVE, "Save");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_BELL, "Notify");
lv_obj_set_event_cb(list_btn, event_handler);
list_btn = lv_list_add_btn(list1, LV_SYMBOL_BATTERY_FULL, "Battery");
lv_obj_set_event_cb(list_btn, event_handler);
}
#endif