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) 两种类型。

数据绑定 链接到标题

简单绑定 链接到标题

一些控件(例如 labelslider)支持将 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