一、标签控件

主体 滚动条 选中的文本

1 .创建标签部件

1
lv_obj_t *label =lv_label_create(lv_scr_act()); //create中传入父对象

2. 设置文本的三种方式

  • 直接设置文本,存储文本的内存动态分配
1
lv_label_set_text(label,"hello\n lvgl");
  • 文本不存储在动态内存,而是在指定的缓冲区中,代码块中只读,修改可能会崩溃(慎用)
1
lv_label_set_text_static(label,"hello");
  • 格式化显示文本,类似printf
1
lv_label_set_text_fmt(label,"Value:%d",50);

3.设置文本样式

  • 背景颜色
1
2
3
lv_obj_set_style_bg_color(label,    //父对象
lv_color_hex(0xff0000), //十六进制颜色
LV_STATE_DEFAULT); //触发类型
  • 设置背景透明度
1
2
3
lv_obj_set_style_bg_opa(label,
100//0-255,越大越不透明
LV_STATE_DEFAULT); //触发类型
  • 字体大小
1
2
3
lv_obj_set_style_text_font(label,    //对象
&lv_font_montserrat_30, //字号 使用字体要打开lv_conf,h中对应的宏定义
LV_STATE_DEFAULT); //触发类型
  • 文本颜色
1
2
3
lv_obj_set_style_text_color(label,		//对象
lv_color_hex(0x5084db), //字体颜色
LV_STATE_DEFAULT); //触发类型
  • 单独设置字体颜色

    • 开启重新着色的功能
    1
    lv_label_set_recolor(label,ture);
    1
    2
    lv_label_set_text(label,"hello #ff0000 lvgl#");
    lv_label_set_text_fmt(label, "%s%d%s%s", "www.", 100, "ask", ".net");

4. 文本长度

  • 默认情况下,如果没有限定标签部件大小,那它的大小自动拓展为文本大小

  • 长文本模式

1
2
lv_label_set_long_mode(label,  //对象
LV_LABEL_LONG_SCROLL); //显示模式
1
2
3
4
5
6
7
enum {
LV_LABEL_LONG_WRAP, /* 默认模式,如果部件大小已固定,超出的文本将被剪切 */
LV_LABEL_LONG_DOT, /* 将label右下角的最后3个字符替换为... */
LV_LABEL_LONG_SCROLL, /* 来回滚动 */
LV_LABEL_LONG_SCROLL_CIRCULAR, /* 循环滚动 */
LV_LABEL_LONG_CLIP, /* 直接剪切掉部件外面的文本部分 */
};

二、按钮部件

按钮部件相比基础对象,没有新增功能

  • 创建按钮部件
1
lv_obj_t *btn = lv_btn_create(lv_scr_act());
  • 设置样式
1
2
3
lv_obj_set_size(btn,100,50);		    // 大小
lv_obj_set_align(btn,LV_ALIGN_CENTER); // 对齐方式
lv_obj_set_style_bg_color(btn,lv_color_hex(0xde4d3e),LV_STATE_PRESSED);
  • 添加事件
1
2
3
4
5
lv_obj_add_flag(btn,LV_OBJ_FLAG_CHECKABLE);         // 开启状态 
lv_obj_add_event_cb(btn, //对象
event_cb, //回调函数名称
LV_EVENT_VALUE_CHANGED, //触发类型
NULL); //

三、开关部件

开关部件常用于控制某个功能的开启或关闭,可以直接显示被控对象的状态

主体(关闭时显示) LV_PART_MAIN

手柄 LV_PART_KNOB

指示器(开启时显示)LV_PART_INDICATOR

  • 创建开关部件
1
2
lv_obj_t *switch1 = lv_switch_create(lv_scr_act());
lv_obj_set_style_bg_color(switch1,lv_color_hex(0xdf5345),LV_STATE_CHECKED|LV_PART_INDICATOR); //指示器要设置显示状态
  • 添加、清除开关状态
1
2
lv_obj_add_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED);	// 添加状态:默认打开且不可修改
lv_obj_clear_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED); // 清除开关的状态
  • 获取(判断)开关状态
1
lv_obj_has_state(switch1, LV_STATE_CHECKED)					 //判断是否是LV_STATE_CHECKED状态, 返回值:bool类型

四、复选框

主体

勾选框

  • 创建复选框
1
lv_obj_t   *checkbox  = lv_checkbox_create (parent );
  • 文本设置
1
2
lv_checkbox_set_text( checkbox, "remember the password" );			/* 设置文本内容 */
lv_obj_set_style_pad_column( checkbox, 20, LV_STATE_DEFAULT ); /* 设置文本和勾选框的间距
  • 添加、清除复选框状态
1
2
lv_obj_add_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED);	/* 添加状态:默认选中且不可修改 */
lv_obj_clear_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED); /* 清除复选框的状态 */
  • 获取(判断)复选框状态
1
lv_obj_has_state(checkbox, LV_STATE_CHECKED);					 /* 返回值:1,选中; 0,非选中 */

五、进度条部件

常用于显示当前任务的进度

主体

指示器

  • xxxxxxxxxx12 1static void event_cb(lv_event_t* e)2{3    lv_obj_t *target = lv_event_get_target(e);//获取触发事件的部件4    if(target == target_obj)      //判断触发事件的部件5   {6        printf(“父对象触发事件\r\n”);      //执行相应操作7   }8    else if(target == child_obj)9   {10        printf(“子对象触发事件\r\n”);    11   }12}c
1
lv_obj_t   *bar  = lv_bar_create ( parent );
  • 设置大小、当前值、范围值
1
2
lv_obj_set_size( bar, 400, 20 );							/* 设置大小 */ // 决定进度条从左往右,还是从下往上
lv_bar_set_value( bar, 50, LV_ANIM_ON ); /* 设置当前值 */
  • 设置动画时间
1
2
lv_obj_set_style_anim_time( bar, 500, LV_STATE_DEFAULT ); /* 动画设置必须放在当前值设置之前 */ 
//选择器
  • 设置样式和起始值
1
2
lv_bar_set_mode( bar, LV_BAR_MODE_RANGE );			/* 设置模式 */
lv_bar_set_start_value( bar, -50, LV_ANIM_OFF ); /* 设置起始
  • 模式枚举
1
2
3
4
5
enum {
LV_BAR_MODE_NORMAL, /* 默认模式 */
LV_BAR_MODE_SYMMETRICAL, /* 从零值绘制到当前值(当前值可以小于0) */
LV_BAR_MODE_RANGE /* 允许设置起始值,但起始值必须小于当前值 */
};

六、加载器部件

常用于提示当前任务正在加载

主体

指示器

手柄(指示器的起点)

  • 创建加载器部件
1
lv_obj_t   *spinner  = lv_spinner_create( parent, spin_time, arc_length );
  • 设置圆弧的颜色
1
2
lv_obj_set_style_arc_color( spinner, lv_color_hex(0x4a9f00), LV_PART_MAIN ); 	   /* 设置主体圆弧颜色 */
lv_obj_set_style_arc_color( spinner, lv_color_hex(0x83bd55), LV_PART_INDICATOR ); /* 设置指示器圆弧颜色 */
  • 设置圆弧宽度
1
2
lv_obj_set_style_arc_width( spinner, 30, LV_PART_MAIN );	 /* 设置主体圆弧宽度 */
lv_obj_set_style_arc_width( spinner, 30, LV_PART_INDICATOR );/* 设置指示器圆弧宽度 */

七、LED部件

常用于指示控制对象的状态

  • 创建LED部件
1
lv_obj_t   *led = lv_led_create( parent );
  • 设置LED颜色、亮度
1
2
lv_led_set_color( led, lv_color_hex(0xff0000) );/* 设置LED颜色 */
lv_led_set_brightness( led, 0 ); /* 设置LED亮度,范围0~255 */
  • 设置LED状态
1
2
3
lv_led_on( led );				    /* 打开LED(设置亮度为255)*/
lv_led_off( led ); /* 关闭LED */
lv_led_toggle( led ); /* 翻转LED状态 */

八、列表部件

常用于多选一的场景,默认会展现多个选项

主体

滚动条

  • 创建列表部件
1
lv_obj_t   *list = lv_list_create( parent );
  • 添加列表文本
1
lv_list_add_text( list, “Settings" );
  • 添加列表按钮
1
lv_obj_t  *btn= lv_list_add_btn( list, LV_SYMBOL_WIFI, “WLAN"); 
  • 获取列表按钮文本
1
lv_list_get_btn_text( list, list_btn );
  • 回调
1
2
3
4
5
6
lv_obj_t *list_btn = lv_event_get_target(e)
{
lv_obj_t *list_btn = lv_event_get_target(e); // 获取触发源
lv_label_set_text(list_label,lv_list_get_btn_text(list,list_btn)); // 获取按钮文本并显示
lv_obj_add_state(list_btn,LV_STATE_FOCUS_KEY); // 添加状态(聚焦)
}

九、下拉列表部件

按钮

列表

  • 创建下拉列表部件
1
lv_obj_t   *dd = lv_dropdown_create( parent );
  • 设置选项内容
1
2
3
lv_dropdown_set_options( dd, "a\nb\nc\nd");	   			/* 设置选项 */
lv_dropdown_set_options_static( dd, "a\nb\nc\nd "); /* 设置选项 (静态)*/
lv_dropdown_add_option( dd, "e", 4); /* 添加选项,索引从0开始 */
  • 设置当前所选项
1
lv_dropdown_set_selected( dd, 1);					/* 注意:索引从0开始 */
  • 获取选项内容
1
2
3
4
lv_dropdown_get_selected( dd);					/* 获取索引 */

char buf[10];
lv_dropdown_get_selected_str( dd, buf, sizeof(buf)); /* 获取选项文本
  • 设置方向和图标
1
2
lv_dropdown_set_dir(dd, LV_DIR_RIGHT);				/* 设置列表展开方向 */
lv_dropdown_set_symbol(dd, LV_SYMBOL_RIGHT); /* 设置图标 */

十、滚轮部件

常用于多选一的场景,它以滚轮的形式来展现多个选项

主体

选项框

  • 创建滚轮部件
1
lv_obj_t   *roller= lv_roller_create( parent );
  • 设置选项间隔
1
2
lv_obj_set_style_text_line_space(roller, 30, 
LV_STATE_DEFAULT); //选择器,什么状态下应用
  • 设置选项内容、滚动模式
1
lv_roller_set_options(roller, “a\nb\nc\nd”, LV_ROLLER_MODE_NORMAL); 		/* 正常模式 */
  • 设置当前所选项
1
lv_roller_set_selected(roller, 3, LV_ANIM_ON);
  • 设置可见行数
1
lv_roller_set_visible_row_count(roller, 2);
  • 获取选项内容
1
2
3
4
lv_roller_get_selected(roller);								/* 获取索引 */

char buf[10];
lv_roller_get_selected_str(roller, buf, sizeof(buf)); /* 获取选项文

十一、滑块部件

常用于调节某个参数的值,它以直线滑动的形式来修改数值

主体

指示器

旋钮

  • 创建跨快部件
1
lv_obj_t   *slider = lv_slider_create( parent );
  • 设置大小、当前值、范围值
1
lv_obj_set_size(slider, 20, 200);						/* 高度>宽度时,滑块为纵向 */
  • 获取当前值
1
lv_slider_get_value(slider);
  • 模式设置
1
lv_slider_set_mode(slider, LV_SLIDER_MODE_...);
  • 设置、获取左值
1
2
lv_slider_set_left_value(slider, 20, LV_ANIM_OFF);					/* 设置左值 */
lv_slider_get_left_value(slider); /* 获取左值 */

十二、圆弧部件

以弧形滑动的形式来调节、显示某个参数的值

背景弧

前景弧

旋钮

  • 创建圆弧部件
1
lv_obj_t   *arc = lv_arc_create( parent );
  • 设置范围值、当前值
1
lv_arc_set_value(arc, 80);							/* 设置当前值(需要在范围值之内)*/
  • 设置圆弧角度
1
2
lv_arc_set_angles(arc, 135, 270);						/* 设置前景弧角度 */
lv_arc_set_bg_angles(arc, 135, 45); /* 设置背景弧角度 */
  • 设置旋转角度
1
lv_arc_set_rotation(arc, 180);
  • 获取当前值
1
lv_arc_get_value(arc);
  • 设置模式、圆弧绘制速率
1
2
lv_arc_set_mode(arc, LV_ARC_MODE_REVERSE);			/* 设置模式 */
lv_arc_set_change_rate(arc, 90); /* 绘制速率:90°/秒 */

十三 、线条部件

线条部件能够在一组坐标点之间依次绘制直线

主体

  • 创建线条部件
1
lv_obj_t   *line = lv_line_create( parent );
  • 设置线条坐标点
1
2
static lv_point_t  line_points[] = { {15, 5}, {25, 20}, {5, 20}, {15, 5} };
lv_line_set_points(line, line_points, 4);
  • 设置线条样式
1
2
lv_obj_set_style_line_width(line, 8, LV_PART_MAIN);           	/* 设置宽度 */
lv_obj_set_style_line_rounded(line, true, LV_PART_MAIN); /* 设置圆角 */
  • 设置Y轴翻转
1
lv_line_set_y_invert(line, true);

十四、图片部件

用于图片显示、功能界面优化、背景优化等

主体

  • 创建图片部件
1
lv_obj_t  *img = lv_img_create( parent );
  • 设置图片源
    • 图片来源:C语言数组、Bin文件、LVGL内置字体图标
1
2
LV_IMG_DECLARE(img_bird);				/* 声明图片 在函数外 */
lv_img_set_src(img, &img_bird); /* 设置图片源 * /
  • 设置图片偏移
1
2
lv_img_set_offset_x(img, 100);				/* x轴偏移100 */
lv_img_set_offset_y(img, 20); /* y轴偏移20 */
  • 图片重新着色
1
2
3
lv_obj_set_style_img_recolor(img, lv_color_hex(0xffe1d2), LV_PART_MAIN);/* 对图片进行蒙色*/
lv_coloc_make(R,G,B); // 获取RGB三通道的值
lv_obj_set_style_img_recolor_opa(img, 150, LV_PART_MAIN);/* 修该蒙色透明度 */
  • 设置图片缩放、旋转
1
2
3
lv_img_set_zoom(img, 512);		/* 放大2倍 ,原尺寸256 */
lv_img_set_angle(img, 900); /* 顺时针方向旋转90° */

  • 设置中心点
1
2
lv_obj_update_layout(img);		/* 更新图片布局信息 */
lv_img_set_pivot(img, 0, 0); /* 设置中心点 ,中心点坐标是相对于原坐标来说的*/

十五、色环部件

在UI设计中,色环部件一般用作颜色选择器

  • 创建色环部件
1
2
lv_obj_t  *cw = lv_colorwheel_create( parent, 
knob_recolor ); //手柄是否重新着色
  • 设置当前选中的颜色
1
lv_colorwheel_set_rgb(cw, lv_color_hex(0xff0000));
  • 获取当前选中的颜色
1
lv_colorwheel_get_rgb(cw);
  • 设置色环模式
1
2
lv_colorwheel_set_mode(cw, LV_COLORWHEEL_MODE_HUE/SATURATION/VALUE); /* 色相、饱和度、明度 */
lv_colorwheel_set_mode_fixed(cw, true); // 固定色环模式

image-20240928151156900

十六、按钮矩阵部件

可以在不同的行和列中显示多个轻量级按钮

主体

按钮

  • 创建按钮矩阵部件
1
lv_obj_t  *btnm = lv_btnmatrix_create(parent);
  • 设置按钮数量、文本
1
2
static const char *map[] = { "btn1", "\n", "btn2", "btn3", "" };	/* 定义按钮数组,最后一个元素必须为空 */
lv_btnmatrix_set_map(btnm, map); /* 设置按钮 */
  • 设置按钮相对高度
1
lv_btnmatrix_set_btn_width(btnm, id, width);			/* 索引 (id) 从0开始,宽度1~7 ( 默认为1 ) */
  • 获取按钮索引、文本
1
2
lv_btnmatrix_get_selected_btn(btnm);					/* 获取索引 */
lv_btnmatrix_get_btn_text(btnm, id); /* 获取文本 */
  • 设置、清除按钮属性
1
2
3
lv_btnmatrix_set_btn_ctrl(btnm, id, LV_BTNMATRIX_CTRL_...);		 /* 设置单个按钮属性 */
lv_btnmatrix_clear_btn_ctrl(btnm, id, LV_BTNMATRIX_CTRL_...); /* 清除单个按钮属性 */
lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_...); /* 设置所有按钮属性 */
1
2
3
4
5
6
enum {
LV_BTNMATRIX_CTRL_HIDDEN, /* 隐藏 */
LV_BTNMATRIX_CTRL_DISABLED, /* 失能 */
LV_BTNMATRIX_CTRL_CHECKABLE, /* 允许状态切换 */
LV_BTNMATRIX_CTRL_RECOLOR, /* 允许文本重新着色 */
};
  • 设置单次选中属性
1
lv_btnmatrix_set_one_checked(btnm, true);		  /* 注意:需要先设置允许状态切换属性 */

十七、文本区域部件

即文本输入框,用户可以在其中输入文本内容

主体

滚动条

所选文本

光标

占位符

  • 创建文本去部件
1
2
lv_obj_t  *ta = lv_textarea_create(parent);

  • 添加文本
1
2
3
4
lv_textarea_add_char(ta, 'A');					/* 添加一个字符到当前光标处 */
lv_textarea_add_text(ta, "BCDEF"); /* 添加字符串到当前光标处 */
lv_obj_t *keyboard = lv_keyboard_create(lv_scr_act()); /* 创建键盘部件 */
lv_keyboard_set_textarea(keyboard, ta); /* 关联键盘和文本区域部件 */
  • 设置光标位置
1
lv_textarea_set_cursor_pos(ta, 0);				/* 0:最左侧,  LV_TEXTAREA_CURSOR_LAST:最右侧 */
  • 删除文本
1
2
lv_textarea_del_char(ta);							/* 删除光标左侧的一个字符 */
lv_textarea_del_char_forward(ta); /* 删除光标右侧的一个字符
  • 设置模式
1
2
lv_textarea_set_one_line(ta, true);					/* 单行模式 */
lv_textarea_set_password_mode(ta, true); /* 密码模式(隐藏输入的内容) */
  • 限制字符输入
1
2
lv_textarea_set_accepted_chars(ta,"0123456789");	/* 限制接收的字符 */
lv_textarea_set_max_length(ta,6); /* 限制字符长度 */
  • 设置占位符(提示文本)
1
lv_textarea_set_placeholder_text(ta, "password");	 		/* 提示输入密码 */
  • 获取文本
1
const char *txt = lv_textarea_get_text(ta);				 /* 获取文本框文本 */ 
  • 比对文本内容
1
strcmp(const char *s1,const char *s2);					/* 当s1=s2时,返回0 */

十八、键盘部件

可用于输入文本内容,其本质上就是一个特殊的按钮矩阵

主体

按钮

  • 创建键盘部件
1
lv_obj_t  *kb = lv_keyboard_create(parent);
  • 关联文本
1
2
lv_obj_t *ta = lv_textarea_create(lv_scr_act());				/* 创建文本区域部件 */
lv_keyboard_set_textarea(kb, ta); /* 关联键盘和文本区域部件
  • 设置按键弹窗
1
lv_keyboard_set_popovers(kb, true);						/* 允许按键弹窗提示 */
  • 设置键盘模式
1
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);		/* 数字键盘模式 */

十九、图片按钮部件

类似于按钮部件,不同的是,用户可以在其中设置图片

主体

  • 创建图片按钮部件
1
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER);		/* 数字键盘模式 */
  • 设置图片源、按钮大小
1
2
lv_imgbtn_set_src(imgbtn, LV_IMGBTN_STATE_..., src_left, src_mid, src_right);		/* 设置某个状态的图片源 */
lv_obj_set_size(imgbtn, 64 * 3, 64);
  • 设置按钮状态
1
lv_imgbtn_set_state(imgbtn, LV_IMGBTN_STATE_PRESSED);				/* 设置按下状态 */

二十、选项卡部件

主体

按钮

  • 创建选项卡部件
1
lv_obj_t  *tabview =  lv_tabview_create(parent, LV_DIR_..., tab_size);
  • 添加选项卡
1
2
lv_obj_t *tab1 = lv_tabview_add_tab(tabview, "Tab 1"); 
lv_obj_t *tab2 = lv_tabview_add_tab(tabview, "Tab 2");
  • 设置当前选中的选项卡
1
lv_tabview_set_act(tabview, 1, LV_ANIM_OFF); 					/* 索引从0开始 */

二十一、平铺视图部件

可以实现不同方向的页面切换,用户可以在页面中添加内容

主体

滚动条

  • 创建平铺视图部件
1
lv_obj_t  *tileview = lv_tileview_create( parent );
  • 添加页面
1
2
lv_obj_t *tile1 = lv_tileview_add_tile( tileview, 0, 0, LV_DIR_RIGHT );
lv_obj_t *tile2 = lv_tileview_add_tile( tileview, 1, 0, LV_DIR_LEFT );
  • 设置当前显示页面
1
2
3
lv_obj_update_layout( tileview );							/* 更新参数 */
lv_obj_set_tile( tileview, tile2, LV_ANIM_OFF ); /* 根据页面对象设置 */
lv_obj_set_tile_id( tileview, 1, 0, LV_ANIM_OFF ); /* 根据页面行列设置 */

二十二、窗口部件

可以作为一个容器,展示不同功能的页面

  • 创建窗口部件
1
lv_obj_t *win = lv_win_create(parent, header_height);
  • 添加标题、按钮
1
2
lv_obj_t *title = lv_win_add_title(win, "Setting");
lv_obj_t *btn = lv_win_add_btn(win, LV_SYMBOL_CLOSE, 20)
  • 添加主体内容
1
2
lv_obj_t *content = lv_win_get_content(win); 				/* 获取主体 */
lv_obj_t *label = lv_label_create(content); /* 添加内容 */

二十三、消息框部件

消息框部件可以实现弹窗提示,常用于消息通知、确定操作等

主体

标题

关闭按钮

按钮矩阵

  • 创建消息框部件
1
2
3
static const char *btns[] = { "Continue", "Close", "" };
lv_obj_t *msgbox = lv_msgbox_create( lv_scr_act(), "Notice", "Do you want to continue?", btns, true );
// 标题 主体文本 按钮矩阵 关闭按钮
  • 关闭消息框
1
lv_msgbox_close(msgbox);
  • 获取按钮索引、文本
1
2
3
lv_obj_t *target = lv_event_get_current_target(e);			/* 获取当前触发源 */
lv_msgbox_get_active_btn(target); /* 获取按钮索引 */
lv_msgbox_get_active_btn_text(target); /* 获取按钮文本 */

二十四、微调器部件

微调器部件本质上就是一个数字文本,常用于精确调节某个参数的值

主体

光标

  • 创建微调器部件
1
lv_obj_t *spinbox = lv_spinbox_create(parent);
  • 数值递增、递减
1
lv_spinbox_increment(spinbox);								/* 递增 */
  • 设置步进值、范围值
1
2
lv_spinbox_set_step(spinbox, 200);							/* 设置步进值,默认为1*/
lv_spinbox_set_range(spinbox, -1000, 1000); /* 设置范围值,默认±99999*/
  • 设置当前值
1
lv_spinbox_set_value(spinbox, 400)
  • 设置数字格式、光标位置
1
2
lv_spinbox_set_digit_format(spinbox, 4, 2); 				/* 设置数字位数、小数点位置 */
lv_spinbox_set_pos(spinbox, 3); /* 设置光标位置 */
  • 获取当前值
1
lv_spinbox_get_value(spinbox);								 /* 返回值为整数,而非小数 */

二十五、表格部件

有一个个单元格组成,它的单元格中只能存放文本形式的内容

主体

单元格

  • 创建表格部件
1
lv_obj_t *table = lv_table_create(parent);
  • 设置行数、列数
1
2
lv_table_set_row_cnt(table,2); 							/* 设置行数 */
lv_table_set_col_cnt(table,2); /* 设置列数 */
  • 设置单元格的内容
1
2
lv_table_set_cell_value(table, 0, 0, "123");	
lv_table_set_cell_value_fmt(table, 1, 0, "%d", 100 ); /* 格式化输入,类似printf */