【嵌入式LVGL】01.LVGL常用的组件+常用接口函数
·
- 组件 / 部件:看得见、能交互的 UI 单元(按钮、窗口、开关);
- 容器部件:特殊组件(空白 menu3、lv_win、选项卡 tab),可以装其他小部件;
- 普通部件:不能装别的控件(标签、开关、进度条)。
一.常用组件
1.按钮——btn
- 专属结构体:lv_btn_t
- 核心函数:lv_btn_create(),一般绑定 LV_EVENT_CLICKED 点击事件
(1)创建按钮
lv_obj_t * lv_btn_create(lv_obj_t * parent)
返回值:成功 返回按钮对象的地址
失败 NULL
参数:parent --》结构体指针,表示当前这个组件的父窗口
父窗口:你这个组件等一会在哪个窗口/组件上显示,该窗口/组件就是父窗口
比如:我把按钮在当前窗口上显示,当前窗口就是按钮的父窗口
LVGL提供了专门的函数帮你获取当前界面的主窗口,该函数叫做lv_obj_t * lv_scr_act(),返回值就是当前界面的主窗口地址
(2)调整按钮的大小,坐标位置
lv_obj_set_pos(lv_obj_t * obj, lv_coord_t x, lv_coord_t y)
参数:obj --》某个组件对象的地址
x,y --》你要设置的坐标位置(左上角)
lv_obj_set_size(lv_obj_t * obj, lv_coord_t w, lv_coord_t h)
参数:obj --》某个组件对象的地址
w,h --》你要设置的组件宽高
(3)给按钮添加事件回调函数--》让你的按钮可以正常使用,实现你想要的逻辑
lv_obj_add_event_cb(lv_obj_t * obj, lv_event_cb_t event_cb, lv_event_code_t filter, void * user_data)

参数:obj --》某个组件/对象
event_cb --》函数指针void(*)(lv_event_t *e),代表的是事件回调函数

void (*函数指针)(lv_event_t * e);
filter --》你想要判断的事件类型,本质是枚举值(值很多,罗列其中常用的)
LV_EVENT_PRESSED //按下事件
LV_EVENT_RELEASED //松开事件
LV_EVENT_CLICKED //点击事件(按下去然后松开)
user_data --》传递给event_cb的参数
lv_event_t * e参数


(4)按钮上显示文字,必须跟标签配合使用(按钮自己没有专门显示文字的方法)
思路:创建标签(按钮作为标签的父窗口)--》在标签上显示文字
2.文本区域部件——textarea(输入框)
- 专属结构体:lv_textarea_t
- 核心函数:lv_textarea_create()、lv_textarea_set_text()
(1)创建文本区域部件
lv_obj_t* ta = lv_textarea_create(lv_scr_act());
(2)添加字符、字符串
lv_textarea_add_char(ta, 'A');
lv_textarea_add_text(ta, "BCD");
(3)获取输入的字符串(比如判断密码是否正确、账号格式是否合规)
const char* txt = lv_textarea_get_text(ta);
(4)删除文本
lv_textarea_del_char(ta); //删除光标左侧的一个字符(向后删除(Backspace 退格键):删除光标左边字符。)
lv_textarea_del_char_forward(ta); //删除光标右侧的一个字符(forward 代表向前删除(Delete 键效果):删除光标右边的字符;)
(5)设置只显示在一行(默认情况下文本内容过长,会自动换行)
lv_textarea_set_one_line(ta, true)
(6)设置文本隐藏(密码模式)
lv_textarea_set_password_mode(ta, true);(开启密码隐藏,输入字符后会自动替换为*;传入false则关闭密码模式,正常显示文字。)
lv_textarea_set_password_show_time(ta, 3000); //设置你输入字符的时候,显示3000ms才隐藏(打字快了看不到现象,需要输入一个字符停下来看,就是3秒隐藏)
(7)设置默认接收输入的字符(字符白名单)
lv_textarea_set_accepted_chars(ta, "0123456789"); //只能输入0--9这些字符,其他字符输入无效不显示
lv_textarea_set_max_length(ta, 6); //设置字符长度最大是6
(8)显示默认提示信息(占位提示文字placeholder)
lv_textarea_set_placeholder_text(ta, "password");
3.标签——label(专门显示文字的一种组件)
- 专属结构体:lv_label_t(继承lv_obj_t)
- 核心函数:lv_label_create()、lv_label_set_text()、lv_label_set_long_mode()
(1)创建标签
lv_label_create(lv_obj_t * parent)
返回值:成功 返回标签对象的地址
失败 NULL
参数:parent --》结构体指针,表示当前这个组件的父窗口
(2)设置长模式
lv_label_set_long_mode(label, LV_LABEL_LONG_SCROLL); //标签上的文字左右来回滚动(标签的宽要小于文字总的宽度)
LV_LABEL_LONG_SCROLL_CIRCULAR //标签上的文字循环滚动
LV_LABEL_LONG_CLIP //文字超过标签的宽度,直接切除
注意:长模式要看到效果,标签的宽度必须小于字符串的宽度

(3)设置标签文本
lv_label_set_text(lv_obj_t * obj, const char * text)
eg:lv_label_set_text(label,"文本内容");
参数:label --》标签对象
text --》你要设置的文本内容
(4)设置表示文本格式
int num=56;
lv_label_set_text_fmt(label, "Speed: %d RPM",num);
第三个参数可以传常量数字、变量、表达式任意符合对应格式符的数据
4.开关组件——switch
- 专属结构体:lv_switch_t
- 核心函数:lv_switch_create()、lv_obj_has_state(sw, LV_STATE_CHECKED) 判断开关是否打开
(1)创建开关
lv_switch_create(lv_scr_act())
lv_obj_add_event_cb(LV_EVENT_VALUE_CHANGED);
(2)判断开关的状态
static void event_cb(lv_event_t* e)
{
if(lv_obj_has_state(switch1, LV_STATE_CHECKED))
printf("LED ON\n");
else
printf("LED OFF\n");
}
5.小窗口(自己创建和官方给的)
(1)创建小窗口(lv_obj_create 空白盒子)
lv_obj_t* menu3 = lv_obj_create(lv_scr_act()); //其它的组件(比如:标签,开关)可以把menu3作为父窗口
lv_scr_act():获取当前激活屏幕,作为父对象;
lv_obj_create(屏幕):在屏幕上创建一块空白容器(基础lv_obj_t容器);
menu3容器可以作为父窗口,后续把标签、开关、按钮等组件挂载到它内部:
(2)官方小窗口(lv_win)
- 专属结构体:lv_win_t
- 核心函数:lv_win_create()、lv_win_get_content()(必须用这个放子控件)、lv_win_set_title()

(3)两者区别:

6.复选框——checkbox
- 专属结构体:lv_checkbox_t
- 核心函数:lv_checkbox_create()、lv_checkbox_set_text()
(1)创建复选框
lv_obj_t* checkbox = lv_checkbox_create(lv_scr_act());
(2)在复选框的右侧添加文本
lv_checkbox_set_text(checkbox, "密码");
(3)设置复选框跟右侧文本之间的间距
lv_obj_set_style_pad_column(checkbox, 50, LV_STATE_DEFAULT); //参数50就是间距
注意:复选框跟开关组件判断方法一模一样
(lv_obj_has_state(checkbox, LV_STATE_CHECKED)
7.进度条——bar
- 专属结构体:lv_bar_t
- 核心函数:lv_bar_create()、lv_bar_set_value() 设置进度
(1)创建进度条
lv_obj_t* bar = lv_bar_create(lv_scr_act());
(2)设置进度条的范围
lv_bar_set_range(bar, 0, 100);
(3)设置进度条动画显示效果(延时显示),必须放在设置进度条当前值的前面执行该函数(进度条从0显示到50耗费500ms时间)
lv_obj_set_style_anim_time( bar, 500, LV_STATE_DEFAULT); //500ms
(4)设置进度条的当前值
lv_bar_set_value(bar, 50, LV_ANIM_ON);

(5)获取进度条的当前值
int value=lv_bar_get_value(bar);
8.定时器——timer(不属于 UI 控件,但配套所有组件)
- 结构体:lv_timer_t
- 函数:lv_timer_create(回调, 周期, 参数),定时刷新界面、轮询开关状态

(1)创建并启动定时器(父类不是当前活跃屏幕了)
lv_timer_t *lv_timer_create(timer_cb, 50, NULL); //每隔50ms执行一次timer_cb
返回值:lv_timer_t类型的指针,表示定时器对象的地址
参数:第一个 事件处理函数
第二个 定时时间,单位ms
注意:定时器创建后,会自动启动
(2)定时器对应的事件处理函数(参数不是lv_event_t *e了,而是lv_timer_t* timer)
void timer_cb(lv_timer_t* timer);
(3)暂停定时器
void lv_timer_pause(lv_timer_t * timer)
(4)恢复定时器
void lv_timer_resume(lv_timer_t * timer)
(5)开启或者关闭定时器
void lv_timer_enable(bool en)
更多推荐


所有评论(0)