青岛网站建设市场,做音乐网站的目地,信息网站建设费使用年限,wordpress topnews目录
1. Parts
1.1 LV_PART_MAIN
1.2 LV_PART_ITEMS
2. 样式
2.1 设置行列数
2.2 设置单元格字符串 2.3 设置单元格宽度
2.4 设置表格高度和宽度
2.5 设置字符串颜色
2.6 设置边框颜色
2.7 设置背景颜色
3. 事件
4. CELL CTRL 表格是由包含文本的行、列和单元格构…目录
1. Parts
1.1 LV_PART_MAIN
1.2 LV_PART_ITEMS
2. 样式
2.1 设置行列数
2.2 设置单元格字符串 2.3 设置单元格宽度
2.4 设置表格高度和宽度
2.5 设置字符串颜色
2.6 设置边框颜色
2.7 设置背景颜色
3. 事件
4. CELL CTRL 表格是由包含文本的行、列和单元格构建的。它不是真实的对象只是临时绘制的。
表格通过lv_table_create创建。
lv_obj_t* obj1 lv_table_create(lv_scr_act());
1. Parts
表格主要有2个PartsLV_PART_MAIN和LV_PART_ITEMS。
1.1 LV_PART_MAIN
对应表格的背景。
1.2 LV_PART_ITEMS
对应表格的单元格包括背景样式属性和文本属性。
2. 样式
2.1 设置行列数
通过lv_table_set_row_cnt和lv_table_set_col_cnt设置行列数。
lv_table_set_row_cnt(obj1, 5);
lv_table_set_col_cnt(obj1, 2); 2.2 设置单元格字符串
通过lv_table_set_cell_value或lv_table_set_cell_value_fmt设置。
lv_table_set_cell_value(obj1, 0, 0, Item1);
lv_table_set_cell_value_fmt(obj1, 0, 1, 0x%x, 1); 2.3 设置单元格宽度
通过lv_table_set_col_width设置高度不需要设置会根据单元格样式字体、填充等和行数自动计算的。
lv_table_set_col_width(obj1, 1, 100); 2.4 设置表格高度和宽度
通过lv_obj_set_height和lv_obj_set_width或设置表格的整体高度和宽度当大小小于实际大小时表格会出现滚动属性。
lv_obj_set_size(obj1, 200, 200); 如果参数不是具体的数字而是LV_SIZE_CONTENT则大小随内容大小设置。
2.5 设置字符串颜色
lv_obj_set_style_text_color(obj1, lv_color_hex(0xFF0000), LV_PART_ITEMS); 注意PARTS对应的是LV_PART_ITEMS而且并没有影响到单元格选中时的显示。如果要改变选中时的颜色则需要加上状态LV_STATE_FOCUS_KEY
lv_obj_set_style_text_color(obj1, lv_color_hex(0xFF0000), LV_PART_ITEMS | LV_STATE_FOCUS_KEY); 2.6 设置边框颜色
lv_obj_set_style_border_color(obj1, lv_color_make(252, 144, 181), LV_PART_MAIN); 注意外面一圈蓝色实际是选中的框不是表格本体的边框。
如果要设置内部格的框可以通过对象的Style修改
lv_obj_set_style_outline_width(obj1, 2, LV_PART_ITEMS); 2.7 设置背景颜色
和字符串颜色类似LV_PART_ITEMS对应整个背景而LV_PART_ITEMS | LV_STATE_FOCUS_KEY对应选中时的背景颜色。
lv_obj_set_style_bg_color(obj1, lv_color_make(252, 144, 181), LV_PART_ITEMS); lv_obj_set_style_bg_color(obj1, lv_color_make(252, 144, 181), LV_PART_ITEMS | LV_STATE_FOCUS_KEY); 3. 事件
一般可以通过事件LV_EVENT_DRAW_PART_BEGIN和LV_EVENT_DRAW_PART_END重绘来实现特别的显示。
通过lv_obj_add_event_cb添加事件回调函数例如LV_EVENT_DRAW_PART_BEGIN事件的添加方式
lv_obj_add_event_cb(obj1, table_event_begin_cb, LV_EVENT_DRAW_PART_BEGIN, NULL);
回调函数原型如下
static void table_event_begin_cb(lv_event_t* e)
这里有一个重要的指针变量lv_obj_draw_part_dsc_t
lv_obj_draw_part_dsc_t* dsc (lv_obj_draw_part_dsc_t*)lv_event_get_param(e); 通过其成员变量part是否LV_PART_ITEMS
if (dsc-part LV_PART_ITEMS)
{
}
成员变量id的含义是当前行 × 列数 当前列所以要得到行数和列数的方式
uint32_t row dsc-id / lv_table_get_col_cnt(obj);
uint32_t col dsc-id - row * lv_table_get_col_cnt(obj);
成员变量label_dsc对应字符串显示例如将字符串居中显示
if (row 0)
{dsc-label_dsc-align LV_TEXT_ALIGN_CENTER;
} 同理成员变量rect_dsc对应背景的方框。其他则是空指针即无意义。可以通过VS查看变量了解具体的定义。 4. CELL CTRL
即对单元格添加控制定义的控制位有
enum {LV_TABLE_CELL_CTRL_MERGE_RIGHT 1 0,LV_TABLE_CELL_CTRL_TEXT_CROP 1 1,LV_TABLE_CELL_CTRL_CUSTOM_1 1 4,LV_TABLE_CELL_CTRL_CUSTOM_2 1 5,LV_TABLE_CELL_CTRL_CUSTOM_3 1 6,LV_TABLE_CELL_CTRL_CUSTOM_4 1 7,
};
这些位可以通过OR的方式组合控制位。前面2个是系统定义好的CTRL其他4个是自定义CTRL。
获取选中CELL的行列
lv_obj_t* obj lv_event_get_target(e);
uint16_t col;
uint16_t row;
lv_table_get_selected_cell(obj, row, col);
通过lv_table_has_cell_ctrl获取列表单元格是否有发生CTRL通过lv_table_add_cell_ctrl和lv_table_clear_cell_ctrl设置是否产生CTRL。
chk lv_table_has_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
if (chk true)
{lv_table_clear_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
}
else
{lv_table_add_cell_ctrl(obj, row, col, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
} LV_TABLE_CELL_CTRL_TEXT_CROP按字面意思是指裁剪字符串但是没有试出来效果。