What do you want to achieve?
I want to make the local style effect for the indicator part of a slider. Because LVGL’s mono theme can’t display indicator part, i tried to use local styles to make indicator part appear, but the code below doesn’t work:
lv_obj_set_style_bg_color(slider_fan_speed, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR);
lv_obj_set_style_bg_opa(slider_fan_speed, LV_OPA_COVER, LV_PART_INDICATOR);
What have you tried so far?
I have done the same thing to the knob part of the same slider, the local style worked well.
Code to reproduce
void fan_slider_event_cb(lv_event_t * e)
{
uint16_t value = lv_slider_get_value(lv_event_get_target_obj(e));
fan_set_speed(value); //Control the speed of fan (from 0 to 100%)
}
...
void fan_ui()
{
lv_theme_t * theme = lv_theme_mono_init(lv_display_get_default(), false, &lv_font_montserrat_20);
lv_display_set_theme(lv_display_get_default(), theme);
/*Create a screen*/
lv_obj_t * scr_fan = lv_obj_create(NULL);
lv_obj_t * slider_fan_speed = lv_slider_create(scr_fan);
lv_obj_set_size(slider_fan_speed, LV_PCT(65), LV_PCT(20));
lv_obj_center(slider_fan_speed);
lv_obj_add_event_cb(slider_fan_speed, fan_slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);
lv_obj_set_style_bg_color(slider_fan_speed, lv_color_hex(0xFFFFFF), LV_PART_INDICATOR);
lv_obj_set_style_bg_opa(slider_fan_speed, LV_OPA_COVER, LV_PART_INDICATOR);
lv_obj_set_style_bg_color(slider_fan_speed, lv_color_hex(0x000000), LV_PART_KNOB);
lv_obj_set_style_bg_opa(slider_fan_speed, LV_OPA_COVER, LV_PART_KNOB);
lv_slider_set_range(slider_fan_speed, 0, 100);
lv_slider_set_value(slider_fan_speed, 0, LV_ANIM_OFF);
...
/*Add items to group_fan*/
lv_group_t * group_fan = lv_group_create();
lv_group_add_obj(group_fan, slider_fan_speed);
lv_group_set_wrap(group_fan, false);
...
lv_screen_load(scr_fan);
}
Screenshot and/or video
Environment
- LVGL version: 9.3
- Input device: encoder
- display device: mono OLED drived by SSD1306

