样式

## 概念 样式用于设置对象的外观。`LVGL` 中的样式受 `CSS` 启发很大。样式是一个 `lv_style_t` 可以保存属性的变量,例如边框宽度,文本颜色等。与 `class CSS` 类似。并非必须指定所有属性。未指定的属性将使用默认值。可以将样式分配给对象以更改其外观。样式可以被任意数量的对象使用。样式可以级联,这意味着可以将多个样式分配给一个对象,并且每种样式可以具有不同的属性。例如,`style_btn` 可能会导致默认的灰色按钮,并且 `style_btn_red` 只能添加一个 `background-color=red` 以覆盖背景色。以后添加的样式具有更高的优先级。这意味着,如果以两种样式指定属性,则将使用后面添加的样式。如果未在对象中指定,则某些属性(例如,文本颜色)可以从父级继承。对象可以具有比普通样式更高优先级的局部样式。与 `CSS`(伪类描述不同的状态,例如 :`hover`)不同,在 `LVGL` 中,将属性分配给给定的状态。(即类与状态无关,但是每个属性都有一个状态)当对象更改状态时可以应用过渡。 ## 样式的状态(States) 对象可以处于以下状态: ``` lvgl.STATE_DEFAULT --正常,已释放 lvgl.STATE_CHECKED --切换或选中 lvgl.STATE_FOCUSED --通过键盘或编码器聚焦或通过触摸板/鼠标单击 lvgl.STATE_EDITED --由编码器编辑 lvgl.STATE_PRESSED --已按下 lvgl.STATE_DISABLED --禁用 ``` 可以在每种状态和状态组合中定义样式属性。例如,为默认和按下状态设置不同的背景颜色。如果未在状态中定义属性,则将使用最佳匹配状态的属性。通常,它表示带有 `lvgl.STATE_DEFAULT` 状态的属性。如果即使对于默认状态也未设置该属性,则将使用默认值。 ## 级联样式 不需要将所有属性设置为一种样式。可以向对象添加更多样式,然后让后来添加的样式修改或扩展其他样式的属性。例如,创建常规的灰色按钮样式,并为仅设置新的背景色的红色按钮创建新的样式。当在 `CSS` 中列出所有使用的类时,这是相同的概念。较晚添加的样式优先于较早的样式。让我们研究以下情况: - 基本的按钮样式定义了默认状态为深灰色和按下状态为浅灰色 - 红色按钮样式仅在默认状态下将背景色定义为红色 在这种情况下,释放按钮时它将是红色的,因为在最后添加的样式(红色样式)中找到了完美的匹配。按下按钮时,浅灰色是更好的搭配,因为它完美地描述了当前状态,因此按钮将是浅灰色的。 ## 零件(Parts)的样式 对象的零件可以有自己样式。例如,页面包含四个部分: - 背景 - 可滚动部分 - 滚动条 - 边缘闪烁 有三种类型的对象部分的主体,虚拟和现实。 主要部分通常是对象的背景和最大部分。某些对象只有一个主要部分。例如,一个按钮只有一个背景。 虚拟小部件是实时绘制到主体小部件的其他小部件。它们后面没有“真实”对象。例如,页面的滚动条不是真实的对象,仅在绘制页面背景时才绘制。虚拟小部件始终具有与主要小部件相同的状态。如果可以继承该属性,则在转到父级之前还将考虑主体部分。真实小部件是由主对象创建和管理的真实对象。例如,页面的可滚动部分是真实对象。实际小部件的状态可能与主要小部件的状态不同。