想要讲样式就不能只讲样式,我们大致将讲解思路分为,控件结构==>样式分类==>控件状态==>样式优先级==>如何设计程序。
在开始讲样式概念之前,我们还得为之前对象基础篇收收尾,我们通过前面几篇的讲解,我们大致知道了,lvgl的每一种控件都是以lv_obj_create所创建的基础对象为模板分化而来,具体是怎么分化的呢,我们接下来细讲。
就像人体当中的干细胞,其分化后的神经细胞、肌肉细胞,他们虽然保留了部分干细胞特征与结构,如细胞核、细胞膜等等,但也会异化出其他特征与结构,比如血细胞就会异化掉细胞核。
而在LVGL当中,一个控件其实也是像细胞一样有很多部件组成,这些部件就如同细胞当中的细胞核、细胞质、细胞膜,当进行异化时,就可能多出一些部件或者少了部分部件。
而LVGL开发者通过改变样式,增加或者减少部件,使得分化为多种控件。我们在LVGL一个控件大体可以分为以下结构:主体、滚动条、指示器、旋钮、选择部分、相同部件、刻度、光标。
这些部件,尤其是后面几个部件看着有点抽象,我们来解释跟举例这些都是什么。
主体:顾名思义,主体就是一个控件主要部分,也就是我们在屏幕上第一眼看到的部分。
滚动条:就是我们常见的滚动条,当一个控件其宽或者高超出其父容器的宽高后,默认情况下,会自动创建滚动条。
这两个部分也是最常用的部分,几乎所有控件都包含这两个部分。
指示器:例如进度条,主体就是背景,指示器就是显示我们具体设置的值所显示的部分,扯起来有点抽象,还是上图吧!
旋钮:就是可以拖动的按钮,列如滑块中的按钮,文字描述还是较为抽象,直接上图!
选择部分:这个就是被选中的部分,列如在滚轮控件中被选择的部分,直接上图!
相同部分:就是具有很多且特征相同的部分,如键盘当中的按键、表格当中的单元格。
刻度:这个就好理解了,仪表盘上的刻度。
光标:也非常好理解,输入框当中的光标。
确保大家能够完全理解这些部件的具体位置,还是上百问网的描述吧!
部件差不多就讲到这里,后续在讲其他控件时,会陆续提到。为什么将样式之前,要讲部件呢?
因为样式其实就是给一个控件的部件设置的,列如我们想要设置一个基础对象背景为红色,进度条为蓝色,我们居然可以使用同一个函数lv_obj_set_style_bg_color来分别设置这两部分,只需要最后一个参数部件选择不同,即可实现这个功能,代码与效果如下:
lv_obj_t *obj = lv_obj_create(lv_scr_act());
lv_obj_set_width(obj, 100);
lv_obj_set_height(obj, 100);
lv_obj_set_style_bg_color(obj, lv_color_hex(0xFF0000), LV_PART_MAIN | LV_STATE_DEFAULT);//核心,设置主体背景
lv_obj_set_style_bg_color(obj, lv_color_hex(0x0000FF), LV_PART_SCROLLBAR | LV_STATE_DEFAULT);//核心,设置滚动条背景
lv_obj_center(obj);
lv_obj_t *obj1 = lv_obj_create(obj);
lv_obj_set_style_bg_color(obj1, lv_color_hex(0x000000), LV_PART_MAIN | LV_STATE_DEFAULT);
lv_obj_set_width(obj1, 10);
lv_obj_set_height(obj1, 300);
由上面的例子,我们不难理解,设置控件样式其实就是给控件部件设置样式,也就能理解为什么只是增加部件,则会异化出新的控件,部件是LVGL至关重要的一环。
最后,如果想更好的理解样式运用,一定要理解好部件这部分,这是一切样式设置的开始,可以说与控件状态一起奠定了后续操作的基础。