样式

  • 样式是一个 lv_style_t 变量,它可以保存边框宽度、文本颜色等对象的属性尽管可以用简单的方法Lv_set_xxx()直接修改对象的属性,但是用过样式来该的话可以比较方便的修改更多对象的样式。

  • 可以将样式分配给对象以更改其外观。在赋值过程中,可以指定目标部分(和目标状态

LVGL对象包括如下状态且可以通过|来组合

数字代表了这种状态的优先级,最后选择优先级最高的来显示

1.初始化样式和设置/获取属性

样式存储在 lv_style_t 变量中。样式变量应该是 static 、全局或动态分配的。 换句话说,它们不能是函数中的局部变量,当函数结束时它们会被销毁。 在使用样式之前,它应该用 lv_style_init(&my_style) 进行初始化。 初始化后,可以设置或添加样式属性。lv_style_set_<property_name>(&style, <value>);

1
2
3
4
static lv_style_t style_btn_red;
lv_style_init(&style_btn_red);
lv_style_set_bg_color(&style_btn_red, lv_color_red());
lv_style_set_bg_opa(&style_btn_red, LV_OPA_COVER);

删除属性:lv_style_remove_prop(&style, LV_STYLE_BG_COLOR);

获取属性:

1
2
3
4
5
lv_style_value_t v;
lv_res_t res = lv_style_rget_prop(&style, LV_STYLE_BG_COLOR, &v);
if(res == LV_RES_OK) { /*Found*/
do_something(v.color);
}

重置样式:lv_style_reset(&style);

2.向对象应用样式

lv_obj_add_style(obj, &style, <selector>)。 <selector> 是应添加样式的部分和状态的值,例如:

  • LV_PART_MAIN | LV_STATE_DEFAULT

  • LV_STATE_PRESSED:按下状态的主要部分。 LV_PART_MAIN 可以省略

  • LV_PART_SCROLLBAR:默认状态下的滚动条部分。 LV_STATE_DEFAULT 可以省略。

  • LV_PART_SCROLLBAR | LV_STATE_SCROLLED:对象滚动时的滚动条部分

  • 0 与 LV_PART_MAIN | 相同LV_STATE_DEFAULT

  • LV_PART_INDICATOR | LV_STATE_PRESSED | LV_STATE_CHECKED 同时按下和检查对象时的指示器部分。

1
2
lv_obj_add_style(btn, &style_btn, 0);                        /*Default button style*/
lv_obj_add_style(btn, &btn_red, LV_STATE_PRESSED); /*Overwrite only a some colors to red when pressed*/

3.样式中一些常用变量的设置

(1)字体

1
2
void lv_style_set_text_font(lv_style_t * style, 
                            const lv_font_t * value)

字体具有 (每像素位数) 属性。它显示了使用多少位来描述字体中的像素。为像素存储的值决定了像素的不透明度。 这样,使用更高的 bpp,字母的边缘可以更平滑。可能的 bpp 值为 1、2、4 和 8(值越高表示质量越好)。

bpp 还会影响存储字体所需的内存大小。例如,bpp = 4 使字体比 bpp = 1 大近 4 倍。

给对象添加字体:

lv_label_set_text(label1, text);

LVGL中有些宏定义表示一些特殊字符,可以直接在text处使用,不需要加逗号之类的,如lv_label_set_text(label, LV_SYMBOL_OK"Drag me");