LVGL Pro使用指南[07] LVGL XML 数据绑定
本文说明如何在 LVGL XML 使用数据绑定。
概述 链接到标题
在LVGL XML引入了一个Subjects的概念,借助 Subject,可以创建用UI的交互逻辑。Subject 是一个全局数据项,其值既可以由应用程序设置,也可以由UI设置;同时,它的值还可以绑定到UI元素的属性上。相对于常量来说 Subject 类似于变量,其值由应用程序或者UI修改,由UI元素读取, 当该值 Subject和元素的属性关联到一起时,就叫做数据绑定。
例如,当应用程序测量到温度后,设置一个名为 room1_temperature 的 subject,其值绑定到标签(label)上,如下所示:
<lv_label bind_text="room1_temperature"/>
定义 subjects 链接到标题
subjects是一个全局数量项,需要在 globals.xml 中定义。 如下方式创建 Subjects:
<globals>
<subjects>
<int name="battery_power" value="32"/>
<string name="user_name" value="John"/>
</subjects>
</globals>
如上例所示,一个 subject 由 类型(type)、名称(name) 和 初始值(value) 组成。目前subjects仅支持 整数(int) 和 字符串(string) 两种类型。
数据绑定 链接到标题
简单绑定 链接到标题
一些控件(例如 label、slider)支持将 subject 的值直接绑定到部件上。这些绑定通过以 bind_* 开头的属性实现,其值引用一个 subject。
例如:
链接到标题
<lv_slider bind_value="some_subject"/>
<lv_label bind_text="some_subject"/>
绑定建立后,当 subject 的值发生变化(例如通过滑动条调整值)时,所有绑定到该 subject 的部件都会自动更新。
复杂绑定 链接到标题
当绑定需要多个参数时,可以将绑定作为UI元素的子元素添加。这种方式允许对同一个UI元素使用多个绑定,并为它们设置不同的参数。示例如下: -
<lv_label text="Hello world">
<lv_obj-bind_flag_if_eq subject="subject1" flag="hidden" ref_value="10"/>
<lv_obj-bind_flag_if_gt subject="subject1" flag="clickable" ref_value="20"/>
</lv_label>
以上是当subject1的值等于10时影藏lable,当subject1的值大于20时label可以被点击
复杂绑定说明:
<lv_obj-bind_flag_if_eq>—— 当 subject 的值等于参考值时,设置指定的标志(flag)。<lv_obj-bind_flag_if_not_eq>—— 当 subject 的值不等于参考值时,设置标志。<lv_obj-bind_flag_if_gt>—— 当 subject 的值大于参考值时,设置标志。<lv_obj-bind_flag_if_ge>—— 当 subject 的值大于或等于参考值时,设置标志。<lv_obj-bind_flag_if_lt>—— 当 subject 的值小于参考值时,设置标志。<lv_obj-bind_flag_if_le>—— 当 subject 的值小于或等于参考值时,设置标志。<lv_obj-bind_state_if_eq>—— 当 subject 的值等于参考值时,设置状态(state)。<lv_obj-bind_state_if_not_eq>—— 当 subject 的值不等于参考值时,设置状态。<lv_obj-bind_state_if_gt>—— 当 subject 的值大于参考值时,设置状态。<lv_obj-bind_state_if_ge>—— 当 subject 的值大于或等于参考值时,设置状态。<lv_obj-bind_state_if_lt>—— 当 subject 的值小于参考值时,设置状态。<lv_obj-bind_state_if_le>—— 当 subject 的值小于或等于参考值时,设置状态
注意:lv_obj- 前缀可以省略。例如,可以直接写成:<bind_state_if_gt>
除了数据绑定可以修改subject值外,还可以添加事件来在按下、释放等情况下改变subject的值,该部分在后续事件的文章中说明。
参考 链接到标题
https://docs.lvgl.io/master/details/xml/features/subjects.html