lv_checkbox_create函数
此函数用于创建一个复选框的对象- lv_obj_t *lv_checkbox_create(lv_obj_t *parent)
- //parent:父对象的指针
- //ret:返回创建的复选框的句柄
复制代码 lv_checkbox_set_text函数
设置复选框的内容,如果复选框之前已经设置了文本,该函数会覆盖原来的文本。- void lv_checkbox_set_text(lv_obj_t *obj, const char *txt)
- //obj:复选框的的句柄
- //txt:要写入的内容
复制代码 lv_checkbox_set_text_static函数
用于为复选框设置静态文本的函数- void lv_checkbox_set_text_static(lv_obj_t * obj, const char * txt);
- //obj:指向复选框对象的指针
- //txt:要设置的静态文本内容。该文本的生命周期必须与复选框一致,即在复选框销毁之前,txt 指向的内存不能被释放
复制代码 lv_checkbox_get_text函数
获取复选框当前文本内容的函数- const char * lv_checkbox_get_text(lv_obj_t * obj);
- //obj:指向复选框对象的指针
- //ret:返回一个指向复选框当前文本内容的指针
复制代码 lv_event_get_code函数
用于获取事件代码的函数- lv_event_code_t lv_event_get_code(lv_event_t * e);
- //e:指向 lv_event_t 类型的事件描述符,该描述符包含了事件的所有信息
- //ret:返回事件代码,例如 LV_EVENT_CLICKED、LV_EVENT_FOCUSED
复制代码 lv_event_get_target函数
用于获取事件目标对象的函数。它可以从事件描述符中提取触发事件的对象- lv_obj_t * lv_event_get_target(lv_event_t * e);
- //e:指向 lv_event_t 类型的事件描述符,该描述符包含了事件的所有信息。
- //ret:返回触发事件的对象指针(lv_obj_t *),即事件的目标对象
复制代码 lv_obj_get_state函数
用于获取对象当前状态的函数。它返回一个状态码,表示对象的当前状态,例如是否被选中、是否被禁用等- lv_state_t lv_obj_get_state(const lv_obj_t * obj);
- //obj:指向复选框对象的指针
- //ret:返回一个 lv_state_t 类型的状态码,表示对象的当前状态
- /*
- LV_STATE_DEFAULT:默认状态。
- LV_STATE_FOCUSED:对象获得焦点。
- LV_STATE_FOCUSED_KEY:对象通过键盘获得焦点。
- LV_STATE_PRESSED:对象被按下。
- LV_STATE_CHECKED:对象被选中(例如复选框)。
- LV_STATE_DISABLED:对象被禁用。
- LV_STATE_HOVERED:对象被鼠标悬停。
- LV_STATE_FOCUSED_PRESSED:对象获得焦点且被按下。
- LV_STATE_FOCUSED_HOVERED:对象获得焦点且被鼠标悬停。
- */
复制代码 lv_obj_set_flex_flow函数
用于设置容器的 Flexbox 布局方向和换行行为的函数- void lv_obj_set_flex_flow(lv_obj_t * obj, lv_flex_flow_t flow);
- //obj:指向复选框对象的指针
- //flow:Flexbox 的排列方向和换行行为,类型为 lv_flex_flow_t 枚举值
- /*
- LV_FLEX_FLOW_ROW:子对象按行排列,不换行。
- LV_FLEX_FLOW_ROW_WRAP:子对象按行排列,超出容器宽度时换行。
- LV_FLEX_FLOW_COLUMN:子对象按列排列,不换行。
- LV_FLEX_FLOW_COLUMN_WRAP:子对象按列排列,超出容器高度时换行
- */
复制代码 lv_obj_set_flex_align函数
用于设置容器(Container)的 Flexbox 布局对齐方式的函数。它允许开发者控制子对象在主轴(main axis)和交叉轴(cross axis)上的对齐方式- void lv_obj_set_flex_align(lv_obj_t * obj, lv_flex_align_t main_place, lv_flex_align_t cross_place, lv_flex_align_t track_place);
- //obj:指向目标容器对象的指针
- //main_place:主轴上的对齐方式,类型为 lv_flex_align_t 枚举值
- /*
- LV_FLEX_ALIGN_START:子对象对齐到主轴的起始位置。
- LV_FLEX_ALIGN_CENTER:子对象在主轴上居中对齐。
- LV_FLEX_ALIGN_END:子对象对齐到主轴的结束位置。
- LV_FLEX_ALIGN_SPACE_BETWEEN:子对象在主轴上均匀分布,两端对齐。
- LV_FLEX_ALIGN_SPACE_AROUND:子对象在主轴上均匀分布,两端留有间隔。
- LV_FLEX_ALIGN_SPACE_EVENLY:子对象在主轴上均匀分布,包括两端。
- */
- //cross_place:交叉轴上的对齐方式,类型为 lv_flex_align_t 枚举值
- /*
- LV_FLEX_ALIGN_START:子对象对齐到交叉轴的起始位置。
- LV_FLEX_ALIGN_CENTER:子对象在交叉轴上居中对齐。
- LV_FLEX_ALIGN_END:子对象对齐到交叉轴的结束位置。
- LV_FLEX_ALIGN_BASELINE:子对象对齐到基线(仅适用于文本对象)
- */
- //track_place:多行或多列布局时,行或列之间的对齐方式,类型为 lv_flex_align_t 枚举值
- /*
- LV_FLEX_ALIGN_START:行或列对齐到起始位置。
- LV_FLEX_ALIGN_CENTER:行或列居中对齐。
- LV_FLEX_ALIGN_END:行或列对齐到结束位置。
- LV_FLEX_ALIGN_SPACE_BETWEEN:行或列在交叉轴上均匀分布,两端对齐。
- LV_FLEX_ALIGN_SPACE_AROUND:行或列在交叉轴上均匀分布,两端留有间隔。
- LV_FLEX_ALIGN_SPACE_EVENLY:行或列在交叉轴上均匀分布,包括两端
- */
复制代码 lv_obj_get_child函数
用于获取容器中子对象的函数- lv_obj_t * lv_obj_get_child(const lv_obj_t * obj, uint32_t idx);
- //obj:指向目标容器对象的指针
- //idx:子对象的索引,从 0 开始
复制代码- //example
- static void event_handler(lv_event_t * e)
- {
- lv_event_code_t code = lv_event_get_code(e);//获取事件代码
- lv_obj_t * obj = lv_event_get_target(e);//获取事件目标对象
- if(code == LV_EVENT_VALUE_CHANGED) {//对象的值是否发生变化
- const char * txt = lv_checkbox_get_text(obj);//获取复选框的内容
- const char * state = lv_obj_get_state(obj) & LV_STATE_CHECKED ? "Checked" : "Unchecked";//判断对象当前状态
- LV_LOG_USER("%s: %s", txt, state);//插入日志信息
- }
- }
- void lv_example_checkbox_1(void)
- {
- lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);//设置对象为按列排列,不换行
- lv_obj_set_flex_align(lv_scr_act(), LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER);//设置对象为主轴居中对齐,对齐到交叉点的起始位置,多行布局时行列对齐
- lv_obj_t * cb;
- cb = lv_checkbox_create(lv_scr_act());//创建一个复选框对象
- lv_checkbox_set_text(cb, "Apple");//添加文本内容
- lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);//为对象添加回调函数
- cb = lv_checkbox_create(lv_scr_act());
- lv_checkbox_set_text(cb, "Banana");
- lv_obj_add_state(cb, LV_STATE_CHECKED);//为对象添加状态,为对象被选中
- lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);
- cb = lv_checkbox_create(lv_scr_act());
- lv_checkbox_set_text(cb, "Lemon");
- lv_obj_add_state(cb, LV_STATE_DISABLED);//为对象添加状态,为对象被禁用
- lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);
- cb = lv_checkbox_create(lv_scr_act());
- lv_obj_add_state(cb, LV_STATE_CHECKED | LV_STATE_DISABLED);//为对象添加状态,为对象被选中和被禁用
- lv_checkbox_set_text(cb, "Melon\nand a new line");
- lv_obj_add_event_cb(cb, event_handler, LV_EVENT_ALL, NULL);
- lv_obj_update_layout(cb);//更新对象布局
- }
- }
复制代码- // 定义全局样式变量,用于设置单选按钮的样式
- static lv_style_t style_radio;
- static lv_style_t style_radio_chk;
- // 定义全局变量,用于存储当前选中的单选按钮的索引
- static uint32_t active_index_1 = 0;
- static uint32_t active_index_2 = 0;
- // 单选按钮的事件回调函数
- static void radio_event_handler(lv_event_t * e)
- {
- // 从事件描述符中获取用户自定义数据(当前选中的单选按钮索引)
- uint32_t * active_id = lv_event_get_user_data(e);
- // 获取当前处理事件的对象(容器)
- lv_obj_t * cont = lv_event_get_current_target(e);
- // 获取触发事件的目标对象(单选按钮)
- lv_obj_t * act_cb = lv_event_get_target(e);
- // 获取当前选中的单选按钮对象
- lv_obj_t * old_cb = lv_obj_get_child(cont, *active_id);
- /* 如果点击的是容器本身,则不做任何处理 */
- if(act_cb == cont) return;
- // 取消旧单选按钮的选中状态
- lv_obj_clear_state(old_cb, LV_STATE_CHECKED);
- // 设置新单选按钮的选中状态
- lv_obj_add_state(act_cb, LV_STATE_CHECKED);
- // 更新当前选中的单选按钮索引
- *active_id = lv_obj_get_index(act_cb);
- // 打印当前选中的单选按钮索引
- LV_LOG_USER("Selected radio buttons: %d, %d", (int)active_index_1, (int)active_index_2);
- }
- // 创建单选按钮的函数
- static void radiobutton_create(lv_obj_t * parent, const char * txt)
- {
- // 在父容器中创建一个复选框作为单选按钮
- lv_obj_t * obj = lv_checkbox_create(parent);
- // 设置单选按钮的文本
- lv_checkbox_set_text(obj, txt);
- // 启用事件冒泡,使得点击单选按钮时事件会传递到父容器
- lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE);
- // 设置单选按钮的默认样式
- lv_obj_add_style(obj, &style_radio, LV_PART_INDICATOR);
- // 设置单选按钮的选中样式
- lv_obj_add_style(obj, &style_radio_chk, LV_PART_INDICATOR | LV_STATE_CHECKED);
- }
- /**
- * 使用复选框实现单选按钮的功能
- */
- void lv_example_checkbox_2(void)
- {
- /* 初始化单选按钮的样式 */
- // 初始化默认样式
- lv_style_init(&style_radio);
- lv_style_set_radius(&style_radio, LV_RADIUS_CIRCLE); // 设置默认样式为圆形
- // 初始化选中样式
- lv_style_init(&style_radio_chk);
- lv_style_set_bg_img_src(&style_radio_chk, NULL); // 设置选中样式时的背景图片
- /* 创建第一个单选按钮组 */
- // 创建一个容器用于放置单选按钮
- lv_obj_t * cont1 = lv_obj_create(lv_scr_act());
- lv_obj_set_flex_flow(cont1, LV_FLEX_FLOW_COLUMN); // 设置容器为列布局
- lv_obj_set_size(cont1, lv_pct(40), lv_pct(80)); // 设置容器大小为屏幕的40%宽和80%高
- lv_obj_add_event_cb(cont1, radio_event_handler, LV_EVENT_CLICKED, &active_index_1); // 为容器绑定点击事件回调函数
- // 创建5个单选按钮
- uint32_t i;
- char buf[32];
- for(i = 0; i < 5; i++) {
- lv_snprintf(buf, sizeof(buf), "A %d", (int)i + 1); // 生成单选按钮的文本
- radiobutton_create(cont1, buf); // 创建单选按钮并添加到容器中
- }
- // 将第一个单选按钮设置为选中状态
- lv_obj_add_state(lv_obj_get_child(cont1, 0), LV_STATE_CHECKED);
- /* 创建第二个单选按钮组 */
- // 创建另一个容器用于放置单选按钮
- lv_obj_t * cont2 = lv_obj_create(lv_scr_act());
- lv_obj_set_flex_flow(cont2, LV_FLEX_FLOW_COLUMN); // 设置容器为列布局
- lv_obj_set_size(cont2, lv_pct(40), lv_pct(80)); // 设置容器大小为屏幕的40%宽和80%高
- lv_obj_set_x(cont2, lv_pct(50)); // 将容器放置在屏幕的右侧
- lv_obj_add_event_cb(cont2, radio_event_handler, LV_EVENT_CLICKED, &active_index_2); // 为容器绑定点击事件回调函数
- // 创建3个单选按钮
- for(i = 0; i < 3; i++) {
- lv_snprintf(buf, sizeof(buf), "B %d", (int)i + 1); // 生成单选按钮的文本
- radiobutton_create(cont2, buf); // 创建单选按钮并添加到容器中
- }
- // 将第一个单选按钮设置为选中状态
- lv_obj_add_state(lv_obj_get_child(cont2, 0), LV_STATE_CHECKED);
- }
复制代码 来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |