目录
1. 初始化样式
2. 设置样式
3. 添加和移除样式
4. 验证
5. 状态(State)
6. 部分(Parts)
样式用于设置对象的外观,比如颜色等属性,存储在 lv_style_t
变量中,这个变量应该是static 、全局或动态分配的。
1. 初始化样式
在使用样式之前,应使用 lv_style_init(&style)
进行初始化 。
static lv_style_t style;
lv_style_init(&style);
2. 设置样式
初始化后,我们就可以设置样式的属性。 属性集函数如下所示:
lv_style_set_<property_name>(&style, <value>);
例如修改背景颜色:
lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_GREY));
3. 添加和移除样式
样式本身并不会直接发挥作用。只有将其分配给对象使用才能生效。对应添加和移除函数
void lv_obj_add_style(struct _lv_obj_t * obj, lv_style_t * style, lv_style_selector_t selector);
void lv_obj_remove_style(struct _lv_obj_t * obj, lv_style_t * style, lv_style_selector_t selector);
参数含义:
obj - 分配样式的对象
style - 分配的样式
selector - 样式对应的Parts或State,可以通过或运算设置多个Parts或State。默认的State是LV_STATE_DEFAULT。
4. 验证
一段完整的样式测试代码如下,作用是将矩形框的背景颜色改为灰色
lv_obj_t* rect = lv_obj_create(lv_scr_act());
lv_obj_set_size(rect, LV_PCT(20), LV_PCT(20));
lv_obj_align(rect, LV_ALIGN_CENTER, 0, 0);
static lv_style_t style;
lv_style_init(&style);
lv_style_set_bg_color(&style, lv_palette_main(LV_PALETTE_GREY));
lv_obj_add_style(rect, &style, LV_STATE_DEFAULT);
修改前后显示效果对比
5. 状态(State)
对象所处的状态有:
enum {
LV_STATE_DEFAULT = 0x0000, //正常,释放状态
LV_STATE_CHECKED = 0x0001, //切换或检查状态
LV_STATE_FOCUSED = 0x0002, //通过键盘或编码器聚焦或通过触摸板/鼠标点击
LV_STATE_FOCUS_KEY = 0x0004, //通过键盘或编码器聚焦,但不通过触摸板/鼠标聚焦
LV_STATE_EDITED = 0x0008, //由编码器编辑
LV_STATE_HOVERED = 0x0010, //鼠标悬停(现在不支持)
LV_STATE_PRESSED = 0x0020, //被按下
LV_STATE_SCROLLED = 0x0040, //正在滚动
LV_STATE_DISABLED = 0x0080, //禁用状态
LV_STATE_USER_1 = 0x1000, //自定义状态
LV_STATE_USER_2 = 0x2000, //自定义状态
LV_STATE_USER_3 = 0x4000, //自定义状态
LV_STATE_USER_4 = 0x8000, //自定义状态
LV_STATE_ANY = 0xFFFF, /**< Special value can be used in some functions to target all states*/
};
可以通过或运算组合状态。另外,状态是有优先级的,高位的优先级更高,即LV_STATE_CHECKED的优先级高于LV_STATE_DEFAULT。
6. 部分(Parts)
对象可以分为多个Parts,例如一个Slider包含三个部分:背景、指标、旋钮。一个对象可能包含Parts:
enum {
LV_PART_MAIN = 0x000000, /**类似矩形的背景*/
LV_PART_SCROLLBAR = 0x010000, /**滚动条*/
LV_PART_INDICATOR = 0x020000, /**指标,例如用于滑块、条、开关或复选框的勾选框*/
LV_PART_KNOB = 0x030000, /**旋钮*/
LV_PART_SELECTED = 0x040000, /**表示当前选择的选项或部分*/
LV_PART_ITEMS = 0x050000, /**如果小部件具有多个相似元素(例如表格单元格)*/
LV_PART_TICKS = 0x060000, /**刻度上的刻度,例如对于图表或仪表*/
LV_PART_CURSOR = 0x070000, /**标记一个特定的地方,例如文本区域或图表的光标*/
LV_PART_CUSTOM_FIRST = 0x080000, /**可以从这里添加自定义部件*/
LV_PART_ANY = 0x0F0000, /**针对所有的Parts*/
};