目錄
1. 添加文本
2. 添加按鈕
3. 事件
4. 修改樣式
4.1 背景色
4.2?改變項的顏色
列表是一個垂直布局的矩形,可以向其中添加按鈕和文本。
lv_obj_t* list1 = lv_list_create(lv_scr_act());lv_obj_set_size(list1, 180, 220);lv_obj_center(list1);
部件包含:
LV_PART_MAIN - 主要的屬性,大部分是這個部件。
LV_PART_SCROLLBAR - 滾動條的屬性。
1. 添加文本
lv_obj_t * lv_list_add_text(lv_obj_t * list, const char * txt)
添加一行文本,當字符串長度超過顯示時,會自動滾動顯示。
lv_list_add_text(list1, "item1");
lv_list_add_text(list1, "item2");
lv_list_add_text(list1, "item3");
lv_list_add_text(list1, "item4");
注意返回值,函數返回這一行的對象,可以用于設置事件響應點擊行為。
2. 添加按鈕
功能和添加文本類似,只是多了一個icon的顯示。
lv_obj_t * lv_list_add_btn(lv_obj_t * list, const void * icon, const char * txt)
?icon可以是系統符號,也可以是圖片(如下面的代碼,imgFan是之前學習image時的圖片句柄),而字符串部分如果超出顯示會滾動。
lv_list_add_text(list1, "item4 - try to scroll");lv_list_add_btn(list1, LV_SYMBOL_FILE, "New");
lv_list_add_btn(list1, &imgFan, "Fan, try to scroll");
同文本,返回值是這一行的對象。
另外,當參數icon為NULL時,不會添加icon,只添加txt;當txt為NULL時,則只添加icon;如果2個都是NULL時,只添加一個無顯示的btn。
lv_list_add_btn(list1, NULL, "New");
lv_list_add_btn(list1, LV_SYMBOL_FILE, NULL);
lv_list_add_btn(list1, NULL, NULL);
3. 事件
利用返回的對象值設置每行的事件。
lv_obj_t* item;
item = lv_list_add_btn(list1, &imgFan, "Fan, try to scroll");
lv_obj_add_event_cb(item, listBtnFan_cb, LV_EVENT_CLICKED, NULL);static void listBtnFan_cb(lv_event_t* event)
{lv_event_code_t code = lv_event_get_code(event);lv_obj_t* obj = lv_event_get_target(event);lv_obj_t* list = lv_event_get_current_target(event);if (code == LV_EVENT_CLICKED){LV_LOG_USER("Clicked: %s", lv_list_get_btn_text(list, obj));}
}
4. 修改樣式
4.1 背景色
lv_obj_set_style_bg_color(list1, lv_color_hex(0xff0000), LV_PART_MAIN);
4.2?改變項的顏色
直接改是改不了的,一種方案是通過修改整體的樣式實現,另外一種是獲得對應控件的句柄來修改。看list代碼可以看出,實際btn和label是list的子對象,可以通過函數lv_obj_get_child獲得句柄。
item = lv_obj_get_child(list1, 0);
lv_obj_set_style_bg_color(item, lv_color_hex(0xff0000), LV_PART_MAIN);
參數id = 0是因為item1是第一個添加的對象,注意,對于btn,雖然可能添加了2個對象,但是2個是屬于一個id。
item = lv_obj_get_child(list1, 5);
lv_obj_set_style_bg_color(item, lv_color_hex(0xff0000), LV_PART_MAIN);