请问V8上list控件的lv_list_focus接口函数怎么没有了?V7还有的
我们项目升级到V8.3的LVGL了,我要用LIST控件实现菜单界面,发现LIST接口改了,lv_list_focus接口函数没有了,请问这个办? 那就继续用低版本。 V7到V8改动太大了感觉,我们同事说版本升上去就不降了。。。。 换个实现方法,lv_obj_scroll_to_view,这个更简单,而且是通用的,list、tabvie什么的都能用。 lv_obj_t * btn = lv_obj_get_child(list, 0);lv_obj_scroll_to_view(btn, LV_ANIM_ON);
是类似这样的代码吧? baobao5 发表于 2023-11-13 16:04
换个实现方法,lv_obj_scroll_to_view,这个更简单,而且是通用的,list、tabvie什么的都能用。
lv_obj_t * btn = lv_obj_get_child(list, 0);
lv_obj_scroll_to_view(btn, LV_ANIM_ON);
我这样写了,没有任何效果,我们是实体按键的项目,屏是不支持触摸的 Yue@123 发表于 2023-11-14 15:40
lv_obj_t * btn = lv_obj_get_child(list, 0);
lv_obj_scroll_to_view(btn, LV_ANIM_ ...
和屏幕没关系,只要调用了这个函数就行,是不是btn的父容器list也不在屏幕上面,这样的话需要用 lv_obj_scroll_to_view_recursive 递归的滚动到可见。
这个函数的作用就是让控件滚动至可见,和lv_list_focus 的功能是一样的。 baobao5 发表于 2023-11-14 20:46
和屏幕没关系,只要调用了这个函数就行,是不是btn的父容器list也不在屏幕上面,这样的话需要用 lv_obj ...
好的,我试试,多谢 if (setting_screen == NULL){
setting_screen = lv_obj_create(NULL);
}
lv_scr_load(setting_screen);
lv_obj_t * list = lv_list_create(setting_screen);
//lv_obj_t * btn;
lv_list_add_btn(list, LV_SYMBOL_LIST, "Display Setting");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Information");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Language");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Theme");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Password");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Bluetooth");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Factory Reset");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Exit");
lv_obj_set_pos(list, 0, 51);
lv_obj_set_size(list, 800, 320+110);
//lv_obj_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
lv_obj_add_flag(list, LV_OBJ_FLAG_CLICK_FOCUSABLE);
lv_obj_t * btn = lv_obj_get_child(list, 1);
lv_obj_scroll_to_view(btn, LV_ANIM_ON);
我这个list是在屏幕上面啊,但是就是没有焦点在list上的效果
我是想实现进入这个列表界面,默认选中第一个列表菜单这样的效果,用了上面的代码但是没有效果 Yue@123 发表于 2023-11-15 09:22
我是想实现进入这个列表界面,默认选中第一个列表菜单这样的效果,用了上面的代码但是没有效果
下面是lv_list_focus_btn的源码,主要是两个作用,一个是清除其他按钮的focused状态,然后给当前按钮添加focused状态,然后是lv_page_focus,就是让当天按钮可以显示在屏幕上;
lv_obj_scroll_to_view(btn, LV_ANIM_ON)是显示按钮,再加上lv_obj_add_state(btn, LV_STATE_FOCUSED)就可以了;
记得先清除其他按钮的focused状态lv_obj_clear_state。
void lv_list_focus_btn(lv_obj_t * list, lv_obj_t * btn)
{
LV_ASSERT_OBJ(list, LV_OBJX_NAME);
if(btn) {
LV_ASSERT_OBJ(btn, "lv_btn");
}
lv_list_ext_t * ext = lv_obj_get_ext_attr(list);
/*Defocus the current button*/
if(ext->act_sel_btn) lv_obj_clear_state(ext->act_sel_btn, LV_STATE_FOCUSED);
#if LV_USE_GROUP
/*Don't forget which button was selected.
* It will be restored when the list is focused again.*/
if(btn) ext->last_sel_btn = btn;
#endif
/*Focus the new button*/
ext->act_sel_btn = btn;
if(ext->act_sel_btn) {
lv_obj_add_state(ext->act_sel_btn, LV_STATE_FOCUSED);
lv_page_focus(list, ext->act_sel_btn, LV_ANIM_ON);
}
}
baobao5 发表于 2023-11-15 10:21
下面是lv_list_focus_btn的源码,主要是两个作用,一个是清除其他按钮的focused状态,然后给当前按钮添 ...
好的,我试下,多谢回复 lv_obj_t * list = lv_list_create(setting_screen);
lv_obj_t * btn = lv_list_add_btn(list, LV_SYMBOL_LIST, "Display Setting");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Information");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Language");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Theme");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Password");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Bluetooth");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Factory Reset");
lv_list_add_btn(list, LV_SYMBOL_LIST, "Exit");
lv_obj_set_pos(list, 0, 51);
lv_obj_set_size(list, 800, 320+110);
//lv_obj_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);
lv_obj_add_flag(list, LV_OBJ_FLAG_SCROLL_WITH_ARROW);
//lv_obj_t * btn = lv_obj_get_child(list, 1);
for (int i = 0; i<lv_obj_get_child_cnt(list); i++){
lv_obj_clear_state(lv_obj_get_child(list, i), LV_STATE_FOCUSED);
}
lv_obj_scroll_to_view(btn, LV_ANIM_ON);
//lv_obj_scroll_to_view(btn, LV_ANIM_ON);
lv_obj_add_state(btn, LV_STATE_FOCUSED);
lv_obj_add_event_cb(btn, btn_click_event_cb, LV_EVENT_CLICKED, NULL);
还是没有效果,见附件的图,就是没有选中的效果 Yue@123 发表于 2023-11-15 10:53
lv_obj_t * list = lv_list_create(setting_screen);
lv_obj_t * btn = lv_list_add_btn(li ...
选中的效果要自己加,是自定义的。
lv_obj_set_style_xxx(btn, parm, LV_STATE_FOCUSED);
看你的需求的话只需要设置背景色和背景透明度就可以了
lv_obj_set_style_bg_color(subject_btn, lv_color_hex(0x2094f0), LV_STATE_FOCUSED);
lv_obj_set_style_bg_opa(subject_btn, LV_OPA_100, LV_STATE_FOCUSED); baobao5 发表于 2023-11-15 15:52
选中的效果要自己加,是自定义的。
lv_obj_set_style_xxx(btn, parm, LV_STATE_FOCUSED);
列表高亮的已经可以了,多谢!
再请教下,如果我有两个SCREEN界面,从SCREEN1到SCREEN2后,我要返回到SCREEN1,是调用什么接口函数呢?
我现在用的是下面这个:
lv_scr_load_anim(screen2, LV_SCR_LOAD_ANIM_NONE, 0, 0, true);
页:
[1]