LVGL8.2学习笔记
LVGL控件的基础知识
(1) C语言编写的LVGL以结构体的形式实现类似C++ “Class”的思想:
(2) 父子对象的默认关系
LVGL基础对象
LVGL控件的基本属性及相关函数
(1) 大小(size)相关的API函数:
(2) 位置(position)相关的API函数:
(3) 对齐(alignment)相关的API函数:
(4) 样式(styles)相关的API函数:
(5) 事件(events)相关的API函数:
——————————————–控件的使用———————————————
(一)标签控件(label)
1. 创建标签
2. 标签文本设置
3. 文本样式设置
4. 文本超出部件大小
(二)按钮控件(Button)
1.按钮创建及样式配置
(三)开关控件(Switch)
1.开关创建及样式配置
2.通过代码设定开关状态
3.开关状态获取
(四)复选框控件(CheckBox)
1.复选框创建及文本设置
2.复选框状态设置
3.复选框状态获取
(五)进度条控件(Bar)
1.进度条创建
2.进度条模式、起始值设置
3.进度条定时器回调测试
–测试效果图–
(六)加载器控件(Spinner)
(七)LED控件(Led)
1.LED创建
2.LED状态切换
(八)列表条控件(List)
1.列表的创建
2.LVGL自带的图标
(九)下拉列表控件(Dropdown)
1.下拉列表的创建
(十)滚轮控件(Roller)
1.滚轮的创建
(十一)滑块控件(Slider)
1.滑块的创建
(十二)圆弧控件(Arc)
1.圆弧的创建
(十三)线条控件(Line)
1.线条的创建
(十四)图片控件(Img)
1.图片的创建
(十五)色环条控件(colorwheel)
1.色环的创建
(十六)按钮矩阵控件(Btnmatrix)
1.按钮矩阵的创建(示例)
效果图
(十七)文本区域控件(Textarea)
1.文本的创建(示例)
效果图
(十八)键盘控件(Keyboard)
1.键盘的创建(示例)
(十九)图片按钮控件(Imgbtn)
1.图片按钮的创建(示例)
效果图
(二十)选项卡控件(Tabview)
1.选项卡的创建(示例)
效果图
(二十一)平铺视图控件(Tileview)
1.平铺视图的创建(示例)
效果图
(二十二)窗口部件控件(Win)
1.窗口部件的创建(示例)
效果图
(二十三)消息框控件(Msgbox)
1.消息框的创建(示例)
效果图
(二十四)微调器控件(Spinbox)
1.微调器的创建(示例)
效果图
(二十五)表格控件(Table)
1.表格的创建(示例)
效果图
(二十六)中文字库应用
字体生成工具的使用
参考资料
—–LVGL官网手册链接—–
—–百问网LVGL参考手册链接—–
笔记主要记录LVGL控件基本的编程使用和相关的程序,并且在程序中对使用到的API函数进行简要注解(有些是个人的理解),以便后续根据实际项目所需直接套用对应的控件代码修改使用;本文主要参考的是正点原子的LVGL相关教程。
LVGL控件的基础知识
(1) C语言编写的LVGL以结构体的形式实现类似C++ “Class”的思想:
#mermaid-svg-TAj29S0CwzLWZ8Gc {font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .error-icon{fill:#552222;}#mermaid-svg-TAj29S0CwzLWZ8Gc .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-TAj29S0CwzLWZ8Gc .marker{fill:#333333;stroke:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .marker.cross{stroke:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc svg{font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .label{font-family:”trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster-label text{fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster-label span{color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .label text,#mermaid-svg-TAj29S0CwzLWZ8Gc span{fill:#333;color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node rect,#mermaid-svg-TAj29S0CwzLWZ8Gc .node circle,#mermaid-svg-TAj29S0CwzLWZ8Gc .node ellipse,#mermaid-svg-TAj29S0CwzLWZ8Gc .node polygon,#mermaid-svg-TAj29S0CwzLWZ8Gc .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node .label{text-align:center;}#mermaid-svg-TAj29S0CwzLWZ8Gc .node.clickable{cursor:pointer;}#mermaid-svg-TAj29S0CwzLWZ8Gc .arrowheadPath{fill:#333333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-TAj29S0CwzLWZ8Gc .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster text{fill:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc .cluster span{color:#333;}#mermaid-svg-TAj29S0CwzLWZ8Gc div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:”trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-TAj29S0CwzLWZ8Gc :root{–mermaid-font-family:”trebuchet ms”,verdana,arial,sans-serif;}
实例化
派生
基础对象lv_obj_t
基础/父 对象
子对象
按钮lv_btn
标签lv_label
进度条lv_bar
下拉列表lv_dropdown
开关lv_switch
….etc
图中的子对象也可以作为父对象,如以lv_btn
作为父对象,lv_label
为子对象。
(2) 父子对象的默认关系
子对象会随着父对象移动,且移动时相对父对象的位置不变
当子对象的位置超出父对象的范围,则子对象超出的部分不会显示
LVGL基础对象
lv_obj_t *obj = lv_obj_create(lv_scr_act());
lv_scr_act() /*以当前屏幕创建对象*/
scr_act_width() /*获取活动屏幕的宽度*/
scr_act_height() /*获取活动屏幕的宽度*/
LVGL控件的基本属性及相关函数
基本属性 |
作用 |
大小(size) |
宽度和高度设置 |
位置(position) |
设置控件的相对屏幕/父对象的位置,默认以左上角为原点,向下为Y轴,向右为X轴 |
对齐(alignment) |
1.可设置子对象参照父对象对齐;2.一个对象参照另一个对象对齐 |
样式(styles) |
设置控件的外观属性 |
事件(events) |
控件的动作触发回调函数(事件) ,在函数中进行相关的处理操作 |
(1) 大小(size)相关的API函数:
/*设置控件的宽度*/
lv_obj_set_width(obj, new_width);
/*设置高度*/
lv_obj_set_height(obj, new_height);
/*同时设置宽度、高度*/
lv_obj_set_size(obj, new_width, new_height);
/*获取当前活动屏幕宽高*/
lv_obj_get_width(lv_scr_act());
lv_obj_get_height(lv_scr_act());
(2) 位置(position)相关的API函数:
/*设置X坐标*/
lv_obj_set_x(obj, new_x);
/*设置Y轴坐标*/
lv_obj_set_y(obj, new_y);
/*同时设置X、Y轴坐标*/
lv_obj_set_pos(obj, new_x, new_y);
(3) 对齐(alignment)相关的API函数:
/*参照父对象对齐,一般用于子对象的在父对象的内部的相对位置设置*/
lv_obj_set_align(obj, align);
/*参照父对象对齐之后,再进行偏移*/
lv_obj_align(obj, align, x, y);
/*参照其他对象对齐(非父子关系),再进行偏移*/
lv_obj_align_to(obj_to_align, reference_obj, align, x, y);
对齐模式(align)的选择可参考下图中的相对位置;灰色方框内表示父子对象可选的对齐方式,灰色方框外表示非父子对象可选的对齐方式

(4) 样式(styles)相关的API函数:
/*自定义样式添加的基本流程;(可封装为一个函数)*/
/*-------------------------------------Start--------------------------------------*/
static lv_style_t style; /* 定义样式变量,需设置为静态或全局 */
lv_obj_t* obj = lv_obj_create(lv_scr_act()); /* 创建控件 */
lv_style_init(&style); /* 初始化样式 */
/**每个控件都有不同的样式属性**/
/*--(大小)Size--(位置)Position--(背景)Background--(轮廓)Outline--(边框)Border--(阴影)Shadow--其他--*/
/*可参考LVGL手册查找对应API,举例如下*/
lv_style_set_bg_color(&style, lv_color_hex(0xffffff)); /* 设置背景颜色 */
lv_obj_set_style_opa(obj,100,LV_STATE_DEFAULT); /* 设置控件透明度 */
lv_obj_set_style_text_font(obj,&lv_font_montserrat_14,LV_STATE_DEFAULT); /*设置文本字体*/
lv_obj_t * obj = lv_obj_create(lv_scr_act()); /* 创建一个部件 */
lv_obj_add_style(obj, & style, LV_STATE_DEFAULT); /* 设置部件的样式 */
/*-------------------------------------End--------------------------------------*/
/*本地样式的添加*/
/*-------------------------------------Start--------------------------------------*/
lv_obj_t * obj = lv_obj_create(lv_scr_act()); /* 创建部件 */
lv_obj_set_style_bg_color(obj, lv_color_hex(0xffffff),LV_STATE_DEFAULT); /* 设置部件的样式 */
/*-------------------------------------End--------------------------------------*/
/*--------------------------------------------------------------------------------*/
/*--------------------------控件在什么状态下使样式生效---------------------------*/
enum {
LV_STATE_DEFAULT = 0x0000, /* 默认状态 */
LV_STATE_CHECKED = 0x0001, /* 切换或选中状态 */
LV_STATE_FOCUSED = 0x0002, /* 通过键盘、编码器聚焦或通过触摸板、鼠标单击 */
LV_STATE_FOCUS_KEY = 0x0004, /* 通过键盘、编码器聚焦 */
LV_STATE_EDITED = 0x0008, /* 由编码器编辑 */
LV_STATE_HOVERED = 0x0010, /* 鼠标悬停(现在不支持)*/
LV_STATE_PRESSED = 0x0020, /* 已按下 */
LV_STATE_SCROLLED = 0x0040, /* 滚动状态 */
LV_STATE_DISABLED = 0x0080, /* 禁用状态 */
…
};
/*--------------------------------------------------------------------------------*/
也可以单独设置控件的各个组成部分的样式,例如滑块的组成部分,可单独设置样式。

(5) 事件(events)相关的API函数:
/*****不同的事件类型共用一个事件回调函数******/
static void event_cb( lv_event_t *e )
{
lv_event_code_t code = lv_event_get_code(e); /* 第一步:获取事件类型 */
if ( code == LV_EVENT_CLICKED ) /* 第二步:判断事件类型 */
{
printf(“事件类型: 按下后释放\r\n”); /* 第三步:执行相应操作 */
}
else if ( code == LV_EVENT_LONG_PRESSED)
{
printf(“事件类型:按下(长按)\r\n”);
}
}
/*****不同的部件共用一个事件回调函数******/
static void event_cb( lv_event_t *e )
{
lv_obj_t *target = lv_event_get_target(e); /* 第一步:获取触发事件的部件 */
if ( target == parent_obj ) /* 第二步:判断触发事件的部件 */
{
printf(“父对象触发事件 \r\n”); /* 第三步:执行相应操作 */
}
else if ( target == child_obj )
{
printf(“子对象触发事件 \r\n”);
}
}
//在控件创建时注册回调函数,例如
lv_obj_t* btn = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn,event_cb,LV_EVENT_LONG_PRESSED,NULL);
——————————————–控件的使用———————————————
(一)标签控件(label)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
滚动条 |
LV_PART_SCROLLBAR |
选中的文本 |
LV_PART_SELECTED |
1. 创建标签
lv_obj_t* label = lv_label_create(parent); /*parent为标签以什么作为父类*/
2. 标签文本设置
/*直接设置文本,文本由内存动态分配*/
lv_label_set_text(label, "Text");
/*设置文本,文本存放在指定缓存区,慎用!!!*/
lv_label_set_text_static( label,"Text" );
/*格式化显示文本,类似printf,可用于事件更新显示*/
lv_label_set_text_fmt( label, “Value: %d”, 50 ) ;
3. 文本样式设置
/*背景颜色设置,由于标签默认的背景透明度为最大,因此要显示标签背景还需设置对应的透明度*/
lv_obj_set_style_bg_color( label, lv_color_hex(0xffe1d4), LV_STATE_DEFAULT);
lv_obj_set_style_opa(label,100,LV_STATE_DEFAULT);
/*字体大小设置*/
lv_obj_set_style_text_font( label, &lv_font_montserrat_30, LV_STATE_DEFAULT);
/*文本颜色设置*/
lv_obj_set_style_text_color( label, lv_color_hex(0xf7b37b), LV_STATE_DEFAULT);
/*设置个别文本的字体颜色*/
lv_label_set_recolor( label, true ); /*开启重新着色功能*/
lv_label_set_text( label, "hallo #1E90FF lvgl# " ); /*单独设置颜色*/
设置个别文本的字体颜色效果:
若需要更改字体可在lv_conf.h
修改如下宏定义:

4. 文本超出部件大小
(1). 若设置了部件大小lv_obj_set_size( )
则文本超出部分会被裁剪掉;若没有限定标签部件大小,则自动扩展为文本大小。
(2).设置长文本模式
lv_label_set_long_mode(label,LV_LABEL_LONG_...);
/*对应可选的长文本模式*/
enum {
/*默认模式,如果部件大小固定,超出文本被裁剪*/
LV_LABEL_LONG_WRAP, /**< Keep the object width, wrap the too long lines and expand the object height*/
/*文本最下面超出字符将被替换为...*/
LV_LABEL_LONG_DOT, /**< Keep the size and write dots at the end if the text is too long*/
/*来回滚动*/
LV_LABEL_LONG_SCROLL, /**< Keep the size and roll the text back and forth*/
/*循环滚动*/
LV_LABEL_LONG_SCROLL_CIRCULAR, /**< Keep the size and roll the text circularly*/
/*直接剪切掉外面的文本部分*/
LV_LABEL_LONG_CLIP, /**< Keep the size and clip the text out of it*/
};
(二)按钮控件(Button)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
1.按钮创建及样式配置
lv_obj_t *btn; /* 创建全局标签结构体 */
/*****多个按钮控件共用同一个回调函数*****/
static void my_event_cb(lv_event_t *e)
{
lv_obj_t *target = lv_event_get_target(); /*获取触发源*/
if(target == /*触发控件 btn1*/ )
{
/***事件处理代码***/
}
else if (target ==/*触发控件 btn2*/)
{
/***事件处理代码***/
}
//...
}
static void Btn_Create()
{
lv_obj_t *btn = lv_btn_create( parent ); /* 创建标签对象 */
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(0xffe1d4), LV_STATE_PRESSED ); /* 设置背景颜色 */
lv_obj_add_flag( btn, LV_OBJ_FLAG_CHECKABLE ); /* 开启状态切换,类似于自锁按钮一样,可保持按下后的状态 */
lv_obj_add_event_cb( btn, my_event_cb, LV_EVENT_VALUE_CHANGED,NULL ); /* 添加事件 注:要使用LV_EVENT_VALUE_CHANGED事件,就必须开启状态切换*/
}
(三)开关控件(Switch)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
手柄 |
LV_PART_KNOB |
指示器 |
LV_PART_INDICATOR |
1.开关创建及样式配置
lv_obj_t *switch1; /* 创建全局标签结构体 */
lv_obj_t *switch2; /* 创建全局标签结构体 */
/*****多个按钮控件共用同一个回调函数*****/
static void my_event_cb(lv_event_t *e)
{
lv_obj_t *target = lv_event_get_target(); /*获取触发源*/
if(target == /*触发控件 switch1*/ )
{
/***事件处理代码***/
if(lv_obj_has_state(switch1, LV_STATE_CHECKED)==1) /*判断开关状态*/
{
lv_obj_clear_state(switch2, LV_STATE_CHECKED); /* 清除开关2的状态*/
}
}
else if (target ==/*触发控件 switch2*/)
{
/***事件处理代码***/
if(lv_obj_has_state(switch2, LV_STATE_CHECKED)==1) /*判断开关状态*/
{
lv_obj_clear_state(switch1, LV_STATE_CHECKED); /* 清除开关1的状态*/
}
}
//...
}
static void Btn_Create()
{
switch1 = lv_switch_create( parent ); /* 创建开关对象 */
switch2 = lv_switch_create( parent ); /* 创建开关对象 */
/*设置指示器颜色时需要注意添加状态,否则指示器会被主体覆盖看不到效果*/
lv_obj_set_style_bg_color(switch1,lv_color_hex(0xFF0000),LV_STATE_CHECKED|LV_PART_INDICATOR);
lv_obj_add_event_cb(switch1,my_event_cb,LV_EVENT_VALUE_CHANGED,NULL); /* 注册回调函数 */
}
2.通过代码设定开关状态
/**/
lv_obj_add_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED); /* 添加状态:默认打开且不可修改 */
lv_obj_clear_state(switch1, LV_STATE_CHECKED | LV_STATE_DISABLED); /* 清除开关的状态*/
3.开关状态获取
lv_obj_has_state(switch1, LV_STATE_CHECKED) /* 返回值:bool类型,开 :1;关: 0 */
(四)复选框控件(CheckBox)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
勾选框 |
LV_PART_INDICATOR |
1.复选框创建及文本设置
lv_obj_t *checkbox; /* 创建全局复选框结构体 */
static void my_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
if(code == LV_EVENT_VALUE_CHANGED)
{
/*勾选了进行处理*/
}
else
{
/*取消勾选进行处理*/
}
}
static void CheckBox_Create()
{
checkbox = lv_checkbox_create (parent ); /* 创建复选框 */
lv_checkbox_set_text( checkbox, "remember the password" ); /* 设置文本内容 */
lv_obj_set_align(checkbox,LV_ALIGN_CENTER);
lv_obj_set_style_pad_column( checkbox, 20, LV_STATE_DEFAULT ); /* 设置文本和勾选框的间距 */
lv_obj_add_event_cb(checkbox ,my_event_cb,LV_EVENT_VALUE_CHANGED,NULL);
}
2.复选框状态设置
lv_obj_add_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED); /* 添加状态:默认选中且不可修改 */
lv_obj_clear_state(checkbox, LV_STATE_CHECKED | LV_STATE_DISABLED); /* 清除复选框的状态 */
3.复选框状态获取
lv_obj_has_state(checkbox, LV_STATE_CHECKED); /* 返回值:1,选中; 0,非选中 */
(五)进度条控件(Bar)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
指示器 |
LV_PART_INDICATOR |
1.进度条创建
static void CheckBox_Create()
{
lv_obj_t *bar = lv_bar_create ( parent ); /* 创建进度条部件 */
lv_obj_set_size( bar, 400, 20 ); /* 设置大小 */
lv_obj_set_align(bar,LV_ALIGN_CENTER); /* 设置位置 */
lv_bar_set_range( bar, -100, 100 ); /* 设置范围值 */
lv_obj_set_style_anim_time( bar, 500, LV_STATE_DEFAULT ); /* 动画设置必须放在当前值设置之前 */
lv_bar_set_value( bar, 50, LV_ANIM_ON ); /* 设置当前值 */
}
/*几点注意事项
1.当进度条高度大于宽度时,其方向变为垂直。
2.动画时间设置需要放在当前值设置之前 ,否则看不到动画效果。
3.动画时间指的是旧值刷新到新值的绘图时间,并不是现实中当前值变化所需的时间。
*/
2.进度条模式、起始值设置
enum {
LV_BAR_MODE_NORMAL, /* 默认模式 */
LV_BAR_MODE_SYMMETRICAL, /* 从零值绘制到当前值(当前值可以小于0),该模式不能设置起始值 */
LV_BAR_MODE_RANGE /* 允许设置起始值,但起始值必须小于当前值 */
};
lv_bar_set_mode( bar, LV_BAR_MODE_RANGE ); /* 设置模式 */
lv_bar_set_start_value( bar, -50, LV_ANIM_OFF ); /* 设置起始值 */
3.进度条定时器回调测试
uint16_t val=0;
lv_obj_t *bar;
lv_label_t *label1;
static void my_timer_cb(lv_timer_t *timer)
{
if(val<100)
{
val++;
lv_bar_set_value(bar,val,LV_ANIM_ON);
lv_label_set_text_fmt(label1,"%d %%",lv_bar_get_value(bar));
}
else
{
lv_label_set_text(label1,"Finished");
}
}
void MY_GUI()
{
bar = lv_bar_create(lv_scr_act());
lv_obj_set_align(bar,LV_ALIGN_CENTER);
lv_obj_set_size(bar,200,20);
lv_bar_set_range(bar,0,100);
lv_obj_set_style_opa(bar,50,LV_STATE_SCROLLED );
label1 = lv_label_create(bar);
lv_obj_set_style_text_color(label1,lv_color_hex(0x56121c),LV_STATE_DEFAULT);
lv_label_set_text(label1, "0%");
lv_obj_center(label1);
lv_obj_set_style_anim_time(bar,500,LV_STATE_DEFAULT);/*动画效果一定要放在bar值的设置之前*/
// lv_bar_set_value(bar,0,LV_ANIM_ON);
lv_bar_set_mode(bar,LV_BAR_MODE_RANGE);
lv_bar_set_start_value(bar,0,LV_ANIM_OFF);
lv_timer_create(my_timer_cb,50,NULL);
}
–测试效果图–

(六)加载器控件(Spinner)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
指示器 |
LV_PART_INDICATOR |
手柄 |
LV_PART_KNOB |
static void Spinner_Create()
{
lv_obj_t *spinner = lv_spinner_create( lv_scr_act(), 1000, 30 ); /* 这里长度设置太小会有问题 */
lv_obj_align(spinner,LV_ALIGN_CENTER,0,0);
lv_obj_set_size(spinner,50,50);
lv_obj_set_style_arc_color( spinner, lv_color_hex(0x00BFFF), LV_PART_MAIN ); /* 设置主体圆弧颜色 */
lv_obj_set_style_arc_color( spinner, lv_color_hex(0xFFFACD), LV_PART_INDICATOR ); /* 设置指示器圆弧颜色 */
lv_obj_set_style_arc_width( spinner, 5, LV_PART_MAIN ); /* 设置主体圆弧宽度 */
lv_obj_set_style_arc_width( spinner, 5., LV_PART_INDICATOR ); /* 设置指示器圆弧宽度 */
}
(七)LED控件(Led)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
- LED部件可进行点击.
1.LED创建
static void Led_Create()
{
lv_obj_t *led= lv_led_create(lv_scr_act());
lv_obj_set_size(led,50,50);
lv_obj_set_align(led,LV_ALIGN_CENTER);
lv_led_set_color( led, lv_color_hex(0x00BFFF) ); /* 设置LED颜色 */
lv_led_set_brightness( led, 255 ); /* 设置LED亮度,范围0~255,感觉没什么变化*/
}
2.LED状态切换
lv_led_on( led ); /* 打开LED(设置亮度为255)*/
lv_led_off( led ); /* 关闭LED */
lv_led_toggle( led ); /* 翻转LED状态 */
(八)列表条控件(List)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
滚动条 |
LV_PART_SCROLLBAR |
1.列表的创建
lv_obj_t *list;
static void my_event_cb_1(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e);
printf("%s\n",lv_list_get_btn_text(list,target)); /*获取列表按钮文本*/
lv_obj_add_state(target,LV_STATE_FOCUS_KEY); /*添加选中-聚焦*/
}
void MY_GUI()
{
list = lv_list_create( lv_scr_act() ); /*创建列表*/
lv_list_add_text( list, "Settings" ); /* 添加列表文本 */
lv_obj_t *list_btn = lv_list_add_btn( list, LV_SYMBOL_WIFI, "WLAN"); /*添加列表按键*/
lv_obj_add_event_cb(list_btn,my_event_cb_1,LV_EVENT_CLICKED,NULL); /*注册回调函数*/
lv_obj_t *list_btn1 = lv_list_add_btn( list, LV_SYMBOL_GPS, "GPS");
lv_obj_add_event_cb(list_btn1,my_event_cb_1,LV_EVENT_CLICKED,NULL);
lv_obj_t *list_btn2 = lv_list_add_btn( list, LV_SYMBOL_BATTERY_1, "BATTERY");
lv_obj_add_event_cb(list_btn2,my_event_cb_1,LV_EVENT_CLICKED,NULL);
}
2.LVGL自带的图标

———————-官网LVGL图标预览–>Overview–>Fonts——————
(九)下拉列表控件(Dropdown)
组成部分 |
编程对应 |
按钮 |
BUTTON |
列表 |
LIST |
1.下拉列表的创建
static void my_event_cb_2(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e);
printf("%d",lv_dropdown_get_selected(target)); /*获取下拉列表选中项的索引,并打印*/
char buf[10];
lv_dropdown_get_selected_str(target,buf,10); /*获取下拉列表选中项的文本,并打印*/
printf("%s\n",buf);
}
void MY_GUI()
{
lv_obj_t *dd = lv_dropdown_create( lv_scr_act() ); /* 创建下拉列表 */
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开始,注意若使用这个添加,就不能使用上面静态添加函数 */
lv_dropdown_set_selected(dd, 1); /* 设置选中的选项,注意:索引从0开始 */
lv_dropdown_set_dir(dd,LV_DIR_NONE); /* 设置列表的展开方式*/
lv_dropdown_set_symbol(dd,LV_SYMBOL_BELL); /* 设置列表的图标样式*/
lv_obj_add_event_cb(dd,my_event_cb_2,LV_EVENT_VALUE_CHANGED,NULL); /*注册回调函数*/
}
(十)滚轮控件(Roller)
组成部分 |
编程对应 |
按钮 |
LV_PART_MAIN |
选项框 |
LV_PART_SELECTED |
1.滚轮的创建
static void my_event_cb_3(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e);
printf("%d",lv_roller_get_selected(target));/*获取滚轮选中项的索引,并打印*/
char buf[10];
lv_roller_get_selected_str(target,buf,10); /*获取滚轮选中项的文本,并打印*/
printf("%s\n",buf);
/*可通过其他事件触发,锁定滚轮为不可选模式,操作如下*/
/*
if(/触发条件/)
{
lv_obj_add_state(roller,LV_STATE_DISABLED);
}
else
{
lv_obj_clear_state(roller,LV_STATE_DISABLED);
}
*/
}
void MY_GUI()
{
lv_obj_t *roller = lv_roller_create(lv_scr_act()); /* 创建滚轮 */
lv_obj_set_style_text_line_space(roller,30,LV_STATE_DEFAULT); /* 设置选项间隔 */
lv_roller_set_options(roller,"a\nb\nc\nd",LV_ROLLER_MODE_NORMAL); /* 设置滚轮选项内容、模式 */
lv_roller_set_selected(roller,3,LV_ANIM_OFF); /* 设置所选项(不设置默认首项),注意:索引从0开始,第三个参数为动画是否开启*/
lv_roller_set_visible_row_count(roller,3); /* 设置可见的行数 */
lv_obj_add_event_cb(roller,my_event_cb_3,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
}
(十一)滑块控件(Slider)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
指示器 |
LV_PART_INDICATOR |
拖动旋钮 |
LV_PART_KNOB |
1.滑块的创建
static void my_event_cb_4(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
if(code == LV_EVENT_VALUE_CHANGED)
{
/*获取滑块的左值和当前值,并打印*/
printf("Left:%d Right:%d\n",lv_slider_get_left_value(target),lv_slider_get_value(target));
}
}
void MY_GUI()
{
lv_obj_t *slider = lv_slider_create( lv_scr_act() );
lv_obj_center(slider);
lv_obj_set_size(slider, 200, 10); /* 高度<宽度时,滑块为横向 */
// lv_obj_set_size(slider, 20, 200); /* 高度>宽度时,滑块为纵向 */
lv_slider_set_range(slider, -100, 100); /* 设置范围值,默认范围0-100 */
lv_slider_set_mode(slider,LV_SLIDER_MODE_RANGE); /* 设置滑块的三种模式,模式设置要在值设置之前,不然事件回调获取值会有问题 */
lv_slider_set_value(slider, 50, LV_ANIM_OFF); /* 设置当前值 */
lv_slider_set_left_value(slider, -50, LV_ANIM_OFF); /* 设置左值 */
lv_obj_add_event_cb(slider,my_event_cb_4,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
}
—加粗样式滑块的三种模式图解—

(十二)圆弧控件(Arc)
组成部分 |
编程对应 |
背景弧 |
LV_PART_MAIN |
前景弧(指示器) |
LV_PART_INDICATOR |
拖动旋钮 |
LV_PART_KNOB |
1.圆弧的创建
static void my_event_cb_5(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取事件类型 */
if(code == LV_EVENT_VALUE_CHANGED)
{
/*获取滑块的左值和当前值,并打印*/
printf("Value:%d \n",lv_arc_get_value(target));
}
}
void MY_GUI()
{
lv_obj_t *arc = lv_arc_create(lv_scr_act());
lv_obj_center(arc);
lv_arc_set_range(arc,0,200); /* 设置范围值 */
lv_arc_set_value(arc,100); /* 设置当前值,和前景弧不要混用,会出错 */
lv_arc_set_bg_angles(arc,135,45); /* 设置背景弧 ,该API要在前景弧设置之前*/
lv_obj_set_style_arc_color( arc, lv_color_hex(0xEEE9E9), LV_PART_KNOB ); /* 设置旋钮颜色 */
lv_arc_set_mode(arc,LV_ARC_MODE_SYMMETRICAL); /* 模式设置 */
// lv_arc_set_rotation(arc,180); /* 旋转圆弧的角度 */
lv_obj_remove_style(arc,NULL,LV_PART_KNOB);
// lv_arc_set_change_rate(arc,90); /* 绘制速率 越大越快*/
lv_obj_add_event_cb(arc,my_event_cb_5,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
}
—圆弧角度设置图解—

(十三)线条控件(Line)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
1.线条的创建
static lv_point_t line_points[]={{10,10},{110,20},{100,60},{110,70},{10,80},{10,10}};
void MY_GUI()
{
lv_obj_t *line = lv_line_create(lv_scr_act());
lv_line_set_points(line,line_points,6); /* 设置线条的绘制坐标点 */
lv_obj_set_style_line_width(line,8,LV_PART_MAIN); /* 设置线条的宽度 */
lv_obj_set_style_line_rounded(line,true,LV_PART_MAIN); /* 设置拐角为圆角 */
// lv_line_set_y_invert(line,true); /* 设置按y轴反转 */
}
(十四)图片控件(Img)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
1.图片的创建
LV_IMG_DECLARE(NCHU); /* 声明图片 */
void MY_GUI()
{
lv_obj_t *img = lv_img_create(lv_scr_act());
// lv_obj_center(img);
lv_img_set_src(img,&NCHU);
lv_obj_center(img);
// lv_img_set_offset_x(img,100); /*设置图片的x偏移*/
// lv_img_set_offset_y(img,50); /*设置图片的y偏移*/
// lv_obj_set_style_img_recolor(img, lv_color_hex(0xffe1d2), LV_PART_MAIN); /*图片重新着色,需要配合透明度设置*/
// lv_obj_set_style_img_recolor_opa(img, 150, LV_PART_MAIN); /*图片透明度设置*/
// lv_img_set_zoom(img, 128); /* 图片的缩放:128缩小1/2;256原尺寸;512放大2倍 */
// lv_img_set_angle(img, 900); /* 顺时针方向旋转90°*/
lv_obj_update_layout(img); /* 更新图片布局信息,要在设置中心点之前调用 */
lv_img_set_pivot(img, 0, 0); /* 设置中心点,相对于原照片的位置 */
}
—-LVGL图片的数组可以使用LVGL官网TOOL->Image Converter(加载可能有点慢!!!)—-

Color format |
含义 |
CF_TRUE_COLOR |
存储RGB颜色 |
CF_TRUE_COLOR_ALPHA |
在RGB的基础上增加了不透明度 |
注:如果使用vscode+ESP_IDF开发ESP32,将生成的图片C数组添加到工程后,要进行full clean,再进行build;否则会出现图片数组未定义的报错!
(十五)色环条控件(colorwheel)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
旋钮 |
LV_PART_KNOB |
1.色环的创建
static lv_obj_t *obj ;
static void my_event_cb_6(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e);
lv_obj_set_style_bg_color(obj,lv_colorwheel_get_rgb(target),LV_PART_MAIN);
}
void MY_GUI()
{
lv_obj_t *cw = lv_colorwheel_create(lv_scr_act(),false); /*创建色环,第二个参数为旋钮颜色跟随设置*/
lv_obj_center(cw);
lv_obj_set_style_arc_width(cw,20,LV_PART_MAIN); /* 宽度设置 */
lv_colorwheel_set_rgb(cw,lv_color_hex(0x00FF00)); /* 设置颜色 */
lv_obj_add_event_cb(cw,my_event_cb_6,LV_EVENT_VALUE_CHANGED,NULL);/*注册回调函数*/
obj = lv_obj_create(lv_scr_act());
lv_obj_center(obj);
lv_obj_set_style_bg_color(obj,lv_colorwheel_get_rgb(cw),LV_PART_MAIN);
// lv_colorwheel_set_mode(cw,LV_COLORWHEEL_MODE_SATURATION); /* 色相、饱和度、透明度设置,长按时有BUG导致模式乱切换,不建议 */
lv_colorwheel_set_mode_fixed(cw,LV_COLORWHEEL_MODE_SATURATION); /* 固定色环模式 */
}
(十六)按钮矩阵控件(Btnmatrix)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
按钮 |
LV_PART_ITEMS |
1.按钮矩阵的创建(示例)
lv_obj_t *label_input;
LV_IMG_DECLARE(user);
static lv_point_t points[]={{0,20},{0,240}};
/*设置按钮数量和文本*/
static const char *map[] = { "1", "2", "3", "\n",
"4", "5", "6", "\n",
"7", "8", "9", "\n",
"#", "0", "%", "" }; /* 定义按钮数组,最后一个元素必须为空 */
static void my_event_cb_7(lv_event_t * e)
{
uint8_t id; /*索引*/
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_PRESSED)
{
id = lv_btnmatrix_get_selected_btn(target);
lv_label_set_text(label_input,lv_btnmatrix_get_btn_text(target,id));
lv_obj_align(label_input,LV_ALIGN_CENTER,0,0);
}
}
void MY_GUI()
{
/*用户图标的创建*/
lv_obj_t *img = lv_img_create(lv_scr_act()); /*创建图片对象*/
lv_img_set_src(img,&user); /*设置图片来源*/
lv_img_set_zoom(img,128); /*设置图片缩放比*/
lv_obj_align(img,LV_ALIGN_CENTER,-140,-60); /*设置图片位置*/
lv_obj_set_style_img_recolor(img,lv_color_hex(0xf2f2f2),0);/*设置重染色*/
lv_obj_set_style_img_recolor_opa(img,100,0); /*设置染色透明度*/
/*用户标签的创建*/
lv_obj_t *label = lv_label_create(lv_scr_act()); /*创建标签对象*/
lv_label_set_text(label,"USER"); /*设置标签文本*/
lv_obj_set_style_text_font(label,&lv_font_montserrat_30,LV_PART_MAIN);/*设置标签文本字体*/
lv_obj_set_style_text_align(label,LV_TEXT_ALIGN_CENTER,LV_PART_MAIN); /*设置标签内容位置*/
lv_obj_align_to(label,img,LV_ALIGN_OUT_BOTTOM_MID,0,-20); /*设置标签位置*/
/*输入框背景的创建*/
lv_obj_t *obj_input = lv_obj_create(lv_scr_act()); /*创建基础对象*/
lv_obj_set_size(obj_input,160,30); /*设置大小*/
lv_obj_align_to(obj_input,label,LV_ALIGN_OUT_BOTTOM_MID,0,16); /*设置对齐位置*/
lv_obj_set_style_bg_color(obj_input,lv_color_hex(0xcccccc),0); /*设置背景颜色*/
lv_obj_set_style_bg_opa(obj_input,150,0); /*设置透明度*/
lv_obj_set_style_border_width(obj_input,0,0); /*去除边框*/
lv_obj_set_style_radius(obj_input,20,0); /*设置圆角*/
lv_obj_remove_style(obj_input,NULL,LV_PART_SCROLLBAR); /*移除滚动模式*/
/*输入框标签,用作显示*/
label_input = lv_label_create(obj_input); /*创建标签对象*/
lv_label_set_text(label_input," "); /*设置文本为空*/
lv_obj_set_style_text_font(label_input,&lv_font_montserrat_30,LV_PART_MAIN);/*设置字体*/
lv_obj_set_style_text_align(label_input,LV_TEXT_ALIGN_CENTER,LV_PART_MAIN); /*设置标签内容位置*/
lv_obj_align_to(label_input,img,LV_ALIGN_OUT_BOTTOM_MID,0,10); /*设置标签位置*/
/*分隔线*/
lv_obj_t *line = lv_line_create(lv_scr_act()); /*创建线*/
lv_line_set_points(line,points,2); /*画线坐标*/
lv_obj_align(line,LV_ALIGN_CENTER,0,-20); /*线位置*/
lv_obj_set_style_line_color(line,lv_color_hex(0xcdcdcd),0); /*线颜色*/
/*按钮矩阵*/
lv_obj_t *btnm = lv_btnmatrix_create(lv_scr_act());/* 创建按钮矩阵 */
lv_obj_set_size(btnm,220,280); /* 设置大小 */
lv_btnmatrix_set_map(btnm, map); /* 设置按钮 */
lv_obj_align(btnm,LV_ALIGN_RIGHT_MID,0,0); /* 位置设置 */
lv_obj_set_style_text_font(btnm,&lv_font_montserrat_30,LV_PART_ITEMS);/* 按钮显示字体设置 */
/*优化矩阵界面*/
lv_obj_set_style_border_width(btnm,0,LV_PART_MAIN); /* 去除主体边框 */
lv_obj_set_style_bg_opa(btnm,0,LV_PART_MAIN); /* 设置主体背景透明度 */
lv_obj_set_style_bg_opa(btnm,0,LV_PART_ITEMS); /* 设置按钮背景透明度 */
lv_obj_set_style_shadow_opa(btnm,0,LV_PART_ITEMS); /* 去除按钮阴影 */
lv_obj_add_event_cb(btnm,my_event_cb_7,LV_EVENT_PRESSED,NULL);/* 按钮矩阵回调 */
// lv_btnmatrix_set_btn_width(btnm,2,2); /* 索引 (id) 从0开始,宽度1~7 ( 默认为1 ) */
// lv_btnmatrix_set_one_checked(btnm,true); /*设置单次选中属性*/
// lv_btnmatrix_set_btn_ctrl(btnm, 0, LV_BTNMATRIX_CTRL_RECOLOR); /* 设置单个按钮属性 */
// lv_btnmatrix_clear_btn_ctrl(btnm, id, LV_BTNMATRIX_CTRL_...); /* 清除单个按钮属性 */
// lv_btnmatrix_set_btn_ctrl_all(btnm, LV_BTNMATRIX_CTRL_CHECKABLE|LV_BTNMATRIX_CTRL_RECOLOR);/* 设置所有按钮属性 */
// lv_btnmatrix_clear_btn_ctrl_all(btnm,LV_BTNMATRIX_CTRL_..); /* 清除所有按钮属性 */
}
效果图

(十七)文本区域控件(Textarea)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
滚动条 |
LV_PART_SCROLLBAR |
所选文本 |
LV_PART_SELECTED |
光标 |
LV_PART_CURSOR |
占位符 |
TEXTAREA_PLACEHOLDER |
1.文本的创建(示例)
lv_obj_t *keyboard;
static void my_event_cb_11(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_FOCUSED)
{
lv_keyboard_set_textarea(keyboard,target);
}
else if(code == LV_EVENT_VALUE_CHANGED)
{
const char *text = lv_textarea_get_text(target);
}
}
static void my_event_cb_21(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_FOCUSED)
{
lv_keyboard_set_textarea(keyboard,target);
}
else if(code == LV_EVENT_VALUE_CHANGED)
{
const char *text = lv_textarea_get_text(target);
}
}
void MY_GUI()
{
lv_obj_t *ta1 = lv_textarea_create(lv_scr_act());
lv_obj_t *ta2 = lv_textarea_create(lv_scr_act());
lv_obj_align(ta1,LV_ALIGN_TOP_MID,0,10);
lv_obj_align(ta2,LV_ALIGN_TOP_MID,0,60);
lv_textarea_set_one_line(ta1, true);
lv_textarea_set_one_line(ta2, true);
keyboard = lv_keyboard_create(lv_scr_act()); /* 创建键盘部件 */
lv_obj_add_event_cb(ta1,my_event_cb_11,LV_EVENT_ALL,NULL);/* 回调 */
lv_obj_add_event_cb(ta2,my_event_cb_21,LV_EVENT_ALL,NULL);/* 回调 */
// 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); /* 关联键盘和文本区域部件 */
//
// lv_textarea_set_cursor_pos(ta,LV_TEXTAREA_CURSOR_LAST);
//
// lv_textarea_del_char(ta); /* 删除光标左侧的一个字符 */
// lv_textarea_del_char_forward(ta); /* 删除光标右侧的一个字符 */
// lv_textarea_set_one_line(ta, true); /* 单行模式,超过内容则形成滚动条 */
// lv_textarea_set_password_mode(ta, true); /* 密码模式(1.5s后隐藏输入的内容) */
// lv_textarea_set_password_show_time(ta, 100); /* 密码显示时间 */
// lv_textarea_set_accepted_chars(ta,"0123456789"); /* 限制接收的字符 */
// lv_textarea_set_max_length(ta,6); /* 限制字符长度 */
// lv_textarea_set_placeholder_text(ta, "password"); /* 提示输入密码 */
// const char *txt = lv_textarea_get_text(ta); /* 获取文本框文本 */
// strcmp(const char *s1,const char *s2); /* 当s1=s2时,返回0 */
}
效果图

(十八)键盘控件(Keyboard)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
按钮 |
LV_PART_ITEMS |
1.键盘的创建(示例)
static void my_event_cb_11(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_FOCUSED)
{
lv_keyboard_set_textarea(keyboard,target);
}
else if(code == LV_EVENT_VALUE_CHANGED)
{
const char *text = lv_textarea_get_text(target);
}
}
static void my_event_cb_21(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_FOCUSED)
{
lv_keyboard_set_textarea(keyboard,target);
}
else if(code == LV_EVENT_VALUE_CHANGED)
{
const char *text = lv_textarea_get_text(target);
}
}
void MY_GUI()
{
lv_obj_t *kb = lv_keyboard_create(lv_scr_act());
lv_obj_t *ta = lv_textarea_create(lv_scr_act()); /* 创建文本区域部件 */
lv_keyboard_set_textarea(kb, ta); /* 关联键盘和文本区域部件 */
lv_keyboard_set_popovers(kb, true); /* 允许按键弹窗提示 */
lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER); /* 数字键盘模式,小写字母模式,大写字母模式,特殊字符模式,数字键盘模式 */
}
(十九)图片按钮控件(Imgbtn)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
1.图片按钮的创建(示例)
LV_IMG_DECLARE(Address);
LV_IMG_DECLARE(Close);
LV_IMG_DECLARE(Phone);
static lv_point_t points_imgbtn[]={{0,0},{0,150}};
static void my_event_cb_Address(lv_event_t * e)
{
static uint8_t flag=0;
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
if(flag == 0)
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0x00BFFF),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=1;
}
else
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=0;
}
}
}
static void my_event_cb_Close(lv_event_t * e)
{
static uint8_t flag=0;
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
if(flag == 0)
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0xff0000),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=1;
}
else
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=0;
}
}
}
static void my_event_cb_Phone(lv_event_t * e)
{
static uint8_t flag=0;
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
if(flag == 0)
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0x00EE76),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=1;
}
else
{
lv_obj_set_style_img_recolor(target,lv_color_hex(0x000000),LV_STATE_DEFAULT);
lv_obj_set_style_img_recolor_opa(target,255,LV_STATE_DEFAULT);
flag=0;
}
}
}
void MY_GUI()
{
lv_obj_t *obj = lv_obj_create(lv_scr_act());
lv_obj_set_size(obj,420,200);
lv_obj_align(obj,LV_ALIGN_CENTER,0,0);
lv_obj_t *imgbtn1 = lv_imgbtn_create(obj);
lv_imgbtn_set_src(imgbtn1,LV_IMGBTN_STATE_RELEASED,NULL,&Address,NULL); /* 设置某个状态的图片源 */
lv_obj_set_size(imgbtn1,64,64); /* 设置图片按钮大小 */
lv_obj_align(imgbtn1,LV_ALIGN_LEFT_MID,0,0);
lv_obj_add_event_cb(imgbtn1,my_event_cb_Address,LV_EVENT_CLICKED,NULL);
lv_obj_t *label_Address = lv_label_create(obj); /*创建标签对象*/
lv_label_set_text(label_Address,"Address"); /*设置文本为空*/
lv_obj_align_to(label_Address,imgbtn1,LV_ALIGN_OUT_BOTTOM_MID,0,10); /*设置标签位置*/
lv_obj_t *imgbtn2 = lv_imgbtn_create(obj);
lv_imgbtn_set_src(imgbtn2,LV_IMGBTN_STATE_RELEASED,NULL,&Close,NULL); /* 设置某个状态的图片源 */
lv_obj_set_size(imgbtn2,64,64); /* 设置图片按钮大小 */
lv_obj_align(imgbtn2,LV_ALIGN_CENTER,0,0);
lv_obj_add_event_cb(imgbtn2,my_event_cb_Close,LV_EVENT_CLICKED,NULL);
lv_obj_t *label_Close = lv_label_create(obj); /*创建标签对象*/
lv_label_set_text(label_Close,"Close"); /*设置文本为空*/
lv_obj_align_to(label_Close,imgbtn2,LV_ALIGN_OUT_BOTTOM_MID,0,10); /*设置标签位置*/
lv_obj_t *imgbtn3 = lv_imgbtn_create(obj);
lv_imgbtn_set_src(imgbtn3,LV_IMGBTN_STATE_RELEASED,NULL,&Phone,NULL); /* 设置某个状态的图片源 */
lv_obj_set_size(imgbtn3,64,64); /* 设置图片按钮大小 */
lv_obj_align(imgbtn3,LV_ALIGN_RIGHT_MID,0,0);
lv_obj_add_event_cb(imgbtn3,my_event_cb_Phone,LV_EVENT_CLICKED,NULL);
lv_obj_t *label_Phone = lv_label_create(obj); /*创建标签对象*/
lv_label_set_text(label_Phone,"Phone"); /*设置文本为空*/
lv_obj_align_to(label_Phone,imgbtn3,LV_ALIGN_OUT_BOTTOM_MID,0,10); /*设置标签位置*/
/*分隔线*/
lv_obj_t *line1 = lv_line_create(obj); /*创建线*/
lv_line_set_points(line1,points_imgbtn,2); /*画线坐标*/
lv_obj_align(line1,LV_ALIGN_CENTER,-90,0); /*线位置*/
lv_obj_set_style_line_color(line1,lv_color_hex(0xcdcdcd),0); /*线颜色*/
lv_obj_t *line2 = lv_line_create(obj); /*创建线*/
lv_line_set_points(line2,points_imgbtn,2); /*画线坐标*/
lv_obj_align(line2,LV_ALIGN_CENTER,90,0); /*线位置*/
lv_obj_set_style_line_color(line2,lv_color_hex(0xcdcdcd),0); /*线颜色*/
效果图

(二十)选项卡控件(Tabview)
组成部分 |
编程对应 |
主体 |
lv_obj |
按钮 |
lv_btnmatrix |
1.选项卡的创建(示例)
lv_obj_t *tabview = lv_tabview_create(lv_scr_act(),LV_DIR_TOP,50); /*创建选项卡*/
//lv_obj_set_style_text_font(tabview,font,LV_STATE_DEFAULT); /*设置字体*/
lv_obj_t *tab1 = lv_tabview_add_tab(tabview,"Mon"); /*添加选项卡1*/
lv_obj_t *tab2 = lv_tabview_add_tab(tabview,"Tue"); /*添加选项卡2*/
lv_obj_t *tab3 = lv_tabview_add_tab(tabview,"Wed"); /*添加选项卡3*/
lv_obj_t *tab4 = lv_tabview_add_tab(tabview,"Thu"); /*添加选项卡4*/
lv_obj_t *tab5 = lv_tabview_add_tab(tabview,"Fri"); /*添加选项卡5*/
lv_obj_t *tab6 = lv_tabview_add_tab(tabview,"Sat"); /*添加选项卡6*/
lv_obj_t *tab7 = lv_tabview_add_tab(tabview,"Sun"); /*添加选项卡7*/
lv_obj_t *label1 = lv_textarea_create(tab1);
lv_textarea_set_text(label1,"I will not make the same mistakes that you did I will not let myself cause my heart so much misery");
lv_obj_set_align(label1,LV_ALIGN_CENTER);
lv_obj_t *label2 = lv_textarea_create(tab2);
lv_textarea_set_text(label2,"I will not break the way you did you fell so hard");
lv_obj_set_align(label2,LV_ALIGN_CENTER);
lv_obj_t *label3 = lv_textarea_create(tab3);
lv_textarea_set_text(label3,"I've learned the hard way to never let it get that far");
lv_obj_set_align(label3,LV_ALIGN_CENTER);
lv_obj_t *label4 = lv_textarea_create(tab4);
lv_textarea_set_text(label4,"Because of you I never stray too far from the sidewalk");
lv_obj_set_align(label4,LV_ALIGN_CENTER);
lv_obj_t *label5 = lv_textarea_create(tab5);
lv_textarea_set_text(label5,"Because of you I learned to play on the safe side so I don't get hurt");
lv_obj_set_align(label5,LV_ALIGN_CENTER);
lv_obj_t *label6 = lv_textarea_create(tab6);
lv_textarea_set_text(label6,"Because of you I find it hard to trust not only me, but everyone around me");
lv_obj_set_align(label6,LV_ALIGN_CENTER);
lv_obj_t *label7 = lv_textarea_create(tab7);
lv_textarea_set_text(label7,"Because of you I am afraid I lose my way");
lv_obj_set_align(label7,LV_ALIGN_CENTER);
/*界面优化*/
lv_obj_t *btn = lv_tabview_get_tab_btns(tabview); /*获取选项卡按钮部分*/
/*未选中的按钮*/
lv_obj_set_style_bg_color(btn,lv_color_hex(0xb7472a),LV_PART_ITEMS|LV_STATE_DEFAULT); /*设置按钮背景颜色*/
lv_obj_set_style_bg_opa(btn,200,LV_PART_ITEMS|LV_STATE_DEFAULT); /*设置按钮背景透明度*/
lv_obj_set_style_text_color(btn,lv_color_hex(0xf3f3f3),LV_PART_ITEMS|LV_STATE_DEFAULT);/*设置按钮文本颜色*/
/*选中的按钮*/
lv_obj_set_style_bg_color(btn,lv_color_hex(0xe1e1e1),LV_PART_ITEMS|LV_STATE_CHECKED); /*设置按钮背景颜色*/
lv_obj_set_style_bg_opa(btn,200,LV_PART_ITEMS|LV_STATE_CHECKED); /*设置按钮背景透明度*/
lv_obj_set_style_text_color(btn,lv_color_hex(0xb7472a),LV_PART_ITEMS|LV_STATE_CHECKED); /*设置按钮文本颜色*/
lv_obj_set_style_border_width(btn,5,LV_PART_ITEMS|LV_STATE_CHECKED); /*设置选中按钮边框宽度*/
/*主体*/
lv_obj_t *obj = lv_tabview_get_content(tabview);
lv_obj_set_style_bg_color(obj,lv_color_hex(0xffffff),LV_STATE_DEFAULT);
lv_obj_set_style_bg_opa(obj,255,LV_STATE_DEFAULT);
lv_tabview_set_act(tabview,0,LV_ANIM_OFF); /* 索引从0开始,关闭动画 */
}
效果图

(二十一)平铺视图控件(Tileview)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
按钮 |
LV_PART_SCROLLBAR |

1.平铺视图的创建(示例)
lv_obj_t *tileview = lv_tileview_create( lv_scr_act() );
lv_obj_set_size(tileview,480,320);
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|LV_DIR_RIGHT ); /*添加页面*/
lv_obj_t *tile3 = lv_tileview_add_tile( tileview, 2, 0, LV_DIR_LEFT ); /*添加页面*/
lv_obj_t *label_1 = lv_label_create(tile1); /*创建标签*/
lv_label_set_text(label_1,"Page_1"); /*添加标签文本*/
// lv_obj_set_style_text_font(label_1,font,LV_STATE_DEFAULT); /*设置标签字体*/
lv_obj_center(label_1); /*对齐*/
lv_obj_t *label_2 = lv_label_create(tile2); /*创建标签*/
lv_label_set_text(label_2,"Page_2"); /*添加标签文本*/
// lv_obj_set_style_text_font(label_1,font,LV_STATE_DEFAULT); /*设置标签字体*/
lv_obj_center(label_2); /*对齐*/
lv_obj_t *label_3 = lv_label_create(tile3); /*创建标签*/
lv_label_set_text(label_3,"Page_3"); /*添加标签文本*/
// lv_obj_set_style_text_font(label_3,font,LV_STATE_DEFAULT); /*设置标签字体*/
lv_obj_center(label_3); /*对齐*/
lv_obj_remove_style(tileview,NULL,LV_PART_SCROLLBAR); /*移除滚动条*/
/*状态栏创建*/
lv_obj_t *label_left = lv_label_create(lv_scr_act());
lv_label_set_text(label_left,"AM 5:50"); /*添加标签文本*/
lv_obj_align(label_left,LV_ALIGN_TOP_LEFT,10,10);
lv_obj_t *label_right = lv_label_create(lv_scr_act());
lv_label_set_text(label_right,LV_SYMBOL_WIFI " 95% " LV_SYMBOL_BATTERY_3); /*添加标签文本*/
lv_obj_align(label_right,LV_ALIGN_TOP_RIGHT,-10,10);
// lv_obj_update_layout( tileview ); /* 更新参数 */
// lv_obj_set_tile( tileview, tile2, LV_ANIM_OFF ); /* 根据页面对象设置 */
lv_obj_set_tile_id( tileview, 0, 0, LV_ANIM_OFF ); /* 根据页面行列设置 */
效果图

(二十二)窗口部件控件(Win)
组成部分 |
编程对应 |
头部 |
Header |
主体 |
Content |
1.窗口部件的创建(示例)
lv_obj_t *win;
static void btn_event_cb(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_target(e); /* 获取触发源 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
lv_obj_add_flag(win,LV_OBJ_FLAG_HIDDEN);
}
}
void MY_GUI()
{
win = lv_win_create(lv_scr_act(),30); /*创建窗口部件*/
lv_obj_set_size(win,300,200); /*设置大小*/
lv_obj_center(win); /*位置居中*/
lv_obj_set_style_border_width(win,1,LV_STATE_DEFAULT); /*边框大小*/
lv_obj_set_style_border_color(win,lv_color_hex(0x8a8a8a),LV_STATE_DEFAULT);/*边框颜色*/
lv_obj_set_style_border_opa(win,100,LV_STATE_DEFAULT); /*边框透明度设置*/
lv_obj_set_style_radius(win,10,LV_STATE_DEFAULT); /*圆角设置*/
lv_obj_t *btn_set = lv_win_add_btn(win,LV_SYMBOL_SETTINGS ,30); /*添加头部按钮*/
lv_obj_set_style_bg_opa(btn_set,0,LV_STATE_DEFAULT); /*背景透明度设置*/
lv_obj_set_style_shadow_width(btn_set,0,LV_STATE_DEFAULT); /*阴影宽度设置*/
lv_obj_set_style_text_color(btn_set,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*设置文本颜色*/
/*标题*/
lv_obj_t *title = lv_win_add_title(win,"Setting"); /*添加头部文本*/
// lv_obj_set_style_text_font(title,);
/*右侧按钮*/
lv_obj_t *bt_close = lv_win_add_btn(win,LV_SYMBOL_CLOSE,30); /*创建按钮*/
lv_obj_set_style_bg_opa(bt_close,0,LV_STATE_DEFAULT); /*背景透明度设置*/
lv_obj_set_style_shadow_width(bt_close,0,LV_STATE_DEFAULT); /*阴影宽度设置*/
lv_obj_set_style_text_color(bt_close,lv_color_hex(0x000000),LV_STATE_DEFAULT);/*设置默认文本颜色*/
lv_obj_set_style_text_color(bt_close,lv_color_hex(0xff0000),LV_STATE_PRESSED);/*设置按下文本颜色*/
lv_obj_add_event_cb(bt_close,btn_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
/*主体背景*/
lv_obj_t *content = lv_win_get_content(win); /*获取主体*/
lv_obj_set_style_bg_color(content,lv_color_hex(0xffffff),LV_STATE_DEFAULT);/*设置背景颜色*/
/*音乐音量滑块*/
lv_obj_t *slider_music = lv_slider_create(content); /*创建滑块*/
lv_obj_set_size(slider_music,200,20); /*设置大小*/
lv_obj_align(slider_music,LV_ALIGN_CENTER,0,-20); /*设置位置*/
lv_slider_set_value(slider_music,50,LV_ANIM_OFF); /*设置值,关闭动画*/
lv_obj_set_style_bg_color(slider_music,lv_color_hex(0x787c78),LV_PART_MAIN);/*设置默认颜色*/
lv_obj_set_style_bg_color(slider_music,lv_color_hex(0x00BFFF),LV_PART_INDICATOR);/*设置指示器颜色*/
lv_obj_remove_style(slider_music,NULL,LV_PART_KNOB); /*移除控制器*/
/*音乐音量图标*/
lv_obj_t *label_music = lv_label_create(content); /*创建标签*/
lv_label_set_text(label_music,LV_SYMBOL_AUDIO); /*设置标签文本*/
lv_obj_align_to(label_music,slider_music,LV_ALIGN_OUT_LEFT_MID,-5,0);/*设置对齐*/
/*闹钟音量滑块*/
lv_obj_t *slider_clock = lv_slider_create(content); /*创建滑块*/
lv_obj_set_size(slider_clock,200,20); /*设置大小*/
lv_obj_align(slider_clock,LV_ALIGN_CENTER,0,20); /*设置位置*/
lv_slider_set_value(slider_clock,50,LV_ANIM_OFF); /*设置值,关闭动画*/
lv_obj_set_style_bg_color(slider_clock,lv_color_hex(0x787c78),LV_PART_MAIN);/*设置默认颜色*/
lv_obj_set_style_bg_color(slider_clock,lv_color_hex(0x00BFFF),LV_PART_INDICATOR);*设置指示器颜色*/
lv_obj_remove_style(slider_clock,NULL,LV_PART_KNOB); /*移除控制器*/
/*闹钟音量图标*/
lv_obj_t *label_clock = lv_label_create(content); /*创建标签*/
lv_label_set_text(label_clock,LV_SYMBOL_BELL); /*设置标签文本*/
lv_obj_align_to(label_clock,slider_clock,LV_ALIGN_OUT_LEFT_MID,-5,0);/*设置对齐*/
}
效果图

(二十三)消息框控件(Msgbox)
组成部分 |
编程对应 |
主体 |
obj |
标题 |
title |
关闭按钮 |
close_btn |
内容 |
content |
按钮矩阵 |
btnmatrix |
1.消息框的创建(示例)
lv_obj_t *slider_label;
lv_obj_t *msgbox;
static void slider_sound_event_cb(lv_event_t * e)
{
static uint8_t flag=0;
lv_obj_t *target = lv_event_get_current_target(e); /* 获取触发源,这里特别注意和msgbox常规获取函数不同 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_VALUE_CHANGED)
{
lv_label_set_text_fmt(slider_label,"%d%%",lv_slider_get_value(target)); /*获取当前值,更新音量百分比*/
if(lv_slider_get_value(target) >= 80 && flag == 0)
{
lv_obj_clear_flag(msgbox,LV_OBJ_FLAG_HIDDEN); /*清除消息框隐藏属性,出现弹出提示*/
flag = 1;
}
else if(lv_slider_get_value(target) < 80)
{
flag = 0;
}
}
}
static void msgbox_btn_event_cb(lv_event_t * e)
{
lv_obj_t *target = lv_event_get_current_target(e); /* 获取触发源,这里特别注意和msgbox常规获取函数不同 */
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
lv_obj_add_flag(msgbox,LV_OBJ_FLAG_HIDDEN);
}
}
void MY_GUI()
{
static const char *btns[] = {" "," ","OK"," "};
/*音乐音量滑块*/
lv_obj_t *slider_sound = lv_slider_create(lv_scr_act()); /*创建滑块*/
lv_obj_set_size(slider_sound,200,15); /*设置大小*/
lv_obj_align(slider_sound,LV_ALIGN_CENTER,0,0); /*设置位置*/
lv_slider_set_value(slider_sound,50,LV_ANIM_OFF); /*设置值*/
lv_obj_add_event_cb(slider_sound,slider_sound_event_cb,LV_EVENT_VALUE_CHANGED,NULL);/*回调函数*/
/*百分比标签*/
slider_label = lv_label_create(lv_scr_act()); /*创建标签*/
lv_label_set_text(slider_label,"50%"); /*设置内容*/
lv_obj_align_to(slider_label,slider_sound,LV_ALIGN_OUT_RIGHT_MID,5,0); /*设置位置*/
/*音量图标*/
lv_obj_t *sound_label = lv_label_create(lv_scr_act());
lv_label_set_text(sound_label,LV_SYMBOL_VOLUME_MAX);
lv_obj_align_to(sound_label,slider_sound,LV_ALIGN_OUT_LEFT_MID,-5,0);
/*消息框*/
msgbox = lv_msgbox_create(lv_scr_act(),LV_SYMBOL_WARNING "Notice","Excessive volume may damage hearing.",btns,false);
lv_obj_set_size(msgbox,250,150);
lv_obj_center(msgbox);
lv_obj_set_style_border_width(msgbox,0,LV_STATE_DEFAULT); /*边框大小*/
lv_obj_set_style_shadow_width(msgbox,20,LV_STATE_DEFAULT); /*阴影宽度*/
lv_obj_set_style_shadow_color(msgbox,lv_color_hex(0xa9a9a9),LV_STATE_DEFAULT);/*边框颜色*/
lv_obj_set_style_pad_top(msgbox,18,LV_STATE_DEFAULT); /*设置顶部填充*/
lv_obj_set_style_pad_left(msgbox,20,LV_STATE_DEFAULT); /*设置左侧填充*/
// lv_obj_add_event_cb(msgbox,slider_sound_event_cb,LV_EVENT_CLICKED,NULL); /*回调函数*/
/*消息框标题*/
lv_obj_t *title = lv_msgbox_get_title(msgbox); /*获取标题部分*/
lv_obj_set_style_text_color(title,lv_color_hex(0xff0000),LV_STATE_DEFAULT); /*设置文本颜色*/
/*消息框主体*/
lv_obj_t *content = lv_msgbox_get_content(msgbox); /*获取主体部分*/
lv_obj_set_style_text_color(content,lv_color_hex(0x6c6c6c),LV_STATE_DEFAULT); /*设置文本颜色*/
lv_obj_set_style_pad_top(content,15,LV_STATE_DEFAULT); /*设置顶部填充*/
/*消息框按钮*/
lv_obj_t *btn = lv_msgbox_get_btns(msgbox); /*获取消息框按钮*/
lv_obj_set_style_bg_opa(btn,0,LV_PART_ITEMS); /*设置透明度*/
lv_obj_set_style_shadow_width(btn,0,LV_PART_ITEMS); /*设置阴影宽度*/
lv_obj_set_style_text_color(btn,lv_color_hex(0x2271df),LV_PART_ITEMS); /*设置文本颜色*/
lv_obj_set_style_text_color(btn,lv_color_hex(0xff0000),LV_PART_ITEMS|LV_STATE_PRESSED);/*设置设置文本颜色*/
lv_obj_add_event_cb(btn,msgbox_btn_event_cb,LV_EVENT_CLICKED,NULL); /*回调函数*/
lv_obj_add_flag(msgbox,LV_OBJ_FLAG_HIDDEN); /*隐藏msgbox*/
}
效果图

(二十四)微调器控件(Spinbox)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
光标 |
LV_PART_CURSOR |
1.微调器的创建(示例)
lv_obj_t *spinbox;
static void spinbox_btnadd_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
lv_spinbox_increment(spinbox); /*递增*/
}
}
static void spinbox_btndec_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e); /* 获取触发事件 */
if(code == LV_EVENT_CLICKED)
{
lv_spinbox_decrement(spinbox); /*递减*/
}
}
void MY_GUI()
{
spinbox = lv_spinbox_create(lv_scr_act()); /*创建微调器*/
lv_obj_center(spinbox); /*设置位置*/
lv_spinbox_set_value(spinbox,0); /*设置值*/
lv_spinbox_set_digit_format(spinbox, 4, 2); /* 设置数字位数、小数点位置 */
lv_spinbox_set_pos(spinbox, 1); /* 设置光标位置 */
lv_spinbox_set_step(spinbox,1); /*设置步进值*/
lv_spinbox_set_range(spinbox,-1000,1000); /*设置位置*/
lv_obj_t *btn_add = lv_btn_create(lv_scr_act()); /*创建按钮*/
lv_obj_align_to(btn_add,spinbox,LV_ALIGN_OUT_RIGHT_MID,5,0); /*设置位置*/
lv_obj_set_style_bg_img_src(btn_add,LV_SYMBOL_PLUS,LV_PART_MAIN); /*设置背景图标*/
lv_obj_add_event_cb(btn_add,spinbox_btnadd_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
lv_obj_t *btn_dec = lv_btn_create(lv_scr_act()); /*创建按钮*/
lv_obj_align_to(btn_dec,spinbox,LV_ALIGN_OUT_LEFT_MID,-5,0); /*设置位置*/
lv_obj_set_style_bg_img_src(btn_dec,LV_SYMBOL_MINUS,LV_PART_MAIN); /*设置背景图标*/
lv_obj_add_event_cb(btn_dec,spinbox_btndec_event_cb,LV_EVENT_CLICKED,NULL);/*回调函数*/
效果图

(二十五)表格控件(Table)
组成部分 |
编程对应 |
主体 |
LV_PART_MAIN |
单元格 |
LV_PART_ITEMS |
1.表格的创建(示例)
void MY_GUI()
{
/*表格*/
lv_obj_t *table = lv_table_create(lv_scr_act()); /*创建表格*/
lv_obj_set_height(table,160); /*设置表格高度*/
lv_obj_center(table); /*设置位置*/
/*标题*/
lv_obj_t *label_title = lv_label_create(lv_scr_act()); /*创建标签*/
lv_obj_align_to(label_title,table,LV_ALIGN_OUT_TOP_MID,-30,-5); /*设置位置*/
lv_label_set_text(label_title,"Fruit Prices"); /*设置内容*/
/*设置第一列单元格内容*/
lv_table_set_cell_value(table,0,0,"Fruit");
lv_table_set_cell_value(table,1,0,"AAAA");
lv_table_set_cell_value(table,2,0,"BBBB");
lv_table_set_cell_value(table,3,0,"CCCC");
lv_table_set_cell_value(table,4,0,"DDDD");
lv_table_set_cell_value(table,5,0,"EEEE");
lv_table_set_cell_value(table,6,0,"FFFF");
/*设置第二列单元格内容*/
lv_table_set_cell_value(table,0,1,"Prices");
lv_table_set_cell_value(table,1,1,"$12");
lv_table_set_cell_value(table,2,1,"$13");
lv_table_set_cell_value(table,3,1,"$14");
lv_table_set_cell_value(table,4,1,"$15");
lv_table_set_cell_value(table,5,1,"$16");
lv_table_set_cell_value(table,6,1,"$19");
/*单元格宽度*/
lv_table_set_col_width(table,0,100);
lv_table_set_col_width(table,1,100);
}
效果图

(二十六)中文字库应用
步骤 |
操作 |
第一步 |
准备使用到的字体文件(TTF、OTF等格式) |
第二步 |
在LVGL官网使用在线字体转换工具 网址链接 |
第三步 |
添加生成的字库到LVGL工程中,声明调用LV_FONT_DECLARE() |
字体生成工具的使用

常规中文字库编码范围:
文字 |
编码范围 |
基本汉字 |
0x4E00-0x7FA5 |
数字、拉丁字母、标点符号 |
0x20-0x7E |
注:转换范围越大生成字库所占内存越大,根据自己的硬件资源合理选择 |
|
参考资料