How to clear focus highlight


I try to develop a custom widget, and i didn’t apply theme yet, and i have a button left is highlighted, i didn’t add anything to make it highlighted and i can’t get rid of it, i don’t think it’s related to focus state,

What MCU/Processor/Board and compiler are you using?

VSCode simulator

What LVGL version are you using?

LVGL 8.3.10

What do you want to achieve?

What have you tried so far?

i tried to clear the state focused by : lv_obj_clear_state(btn_left,LV_STATE_FOCUSED);
i tried to clear the flag click focusable : lv_obj_clear_flag(btn_left, LV_OBJ_FLAG_CLICK_FOCUSABLE);

Screenshot and/or video


the left button is highlighted

By reading the lv_theme_default.c source code:

static void theme_apply(lv_theme_t * th, lv_obj_t * obj)
    else if(lv_obj_check_type(obj, &lv_btn_class)) {
        lv_obj_add_style(obj, &styles->btn, 0);
        lv_obj_add_style(obj, &styles->bg_color_primary, 0);
        lv_obj_add_style(obj, &styles->transition_delayed, 0);
        lv_obj_add_style(obj, &styles->pressed, LV_STATE_PRESSED);
        lv_obj_add_style(obj, &styles->transition_normal, LV_STATE_PRESSED);
        lv_obj_add_style(obj, &styles->outline_primary, LV_STATE_FOCUS_KEY);
        lv_obj_add_style(obj, &styles->grow, LV_STATE_PRESSED);

It can be found that the highlighting effect is achieved using outline. You only need to set the outline width to 0 in the LV_STATE_FOCUS_KEY state:

void btn_test(void)
    lv_obj_t* btn = lv_btn_create(lv_scr_act());
    lv_obj_set_style_outline_width(btn, 0, LV_STATE_FOCUS_KEY);
1 Like

Thank you @FASTSHIFT, it worked with lv_obj_set_style_outline_width(btn, 0, LV_STATE_FOCUS_KEY);