类型

GtkConstraintLayout

说明 [src]

final class Gtk.ConstraintLayout : Gtk.LayoutManager
  implements Gtk.Buildable {
  /* No available fields */
}

使用约束来描述插件之间的关系的布局管理器。

GtkConstraintLayout 是一个布局管理器,它使用通过 GtkConstraint 实例表示的插件属性之间的关系来度量和分配插件。

约束是如何工作的

约束是定义插件属性之间关系的对象;你可以阅读 GtkConstraint 类的描述以获得更深入的定义。

通过获取多个约束并使用 GtkConstraintLayout 将它们应用于插件的子级,可以描述复杂的布局策略;应用于子级或父级插件的每个约束都会为每个属性值求解的参数做出全面布局说明。

需要注意的是,布局是由约束的总和定义的;从现有布局中删除子级或约束而不更改剩余约束可能会导致不稳定或无解的布局。

约束有隐式的“读取顺序”;你应该首先从左上角(或在 RTL 语言中从右上角)描述每个子级的每个边缘以及它们与父容器的关系,先水平描述,然后再垂直描述。

具有太少约束的基于约束的布局可能变得“不稳定”,即:有多个解。不稳定布局的行为未定义。

具有冲突约束的基于约束的布局可能是不可解的,并导致不稳定的布局。你可以使用 GtkConstraint:strength 属性 GtkConstraint 来“推动”布局走向解。

GtkConstraintLayout 作为 GtkBuildable

GtkConstraintLayout 实现< a href="iface.Buildable.html">GtkBuildable 接口并且具有自定义“constraints” 元素,该元素允许在 GtkBuilder UI 文件中描述约束。

指定约束的 UI 定义片段的示例

  <object class="GtkConstraintLayout">
    <constraints>
      <constraint target="button" target-attribute="start"
                  relation="eq"
                  source="super" source-attribute="start"
                  constant="12"
                  strength="required" />
      <constraint target="button" target-attribute="width"
                  relation="ge"
                  constant="250"
                  strength="strong" />
    </constraints>
  </object>

上面的定义会向 GtkConstraintLayout 添加两个约束

  • 在 “button” 的前导边缘和使用约束布局的小工具前导边缘之间加上一个必需约束,再加上 12 个像素
  • 一个强约束,使“button”的宽度大于或等于 250 个像素

“target” 和 “target-attribute” 属性是必需的。

“constraint” 元素的 “source” 和 “source-attribute” 属性是可选的;如果未指定,则假定约束是常数。

“relation” 属性是可选的;如果未指定,则假定约束是相等性。

“力量”属性是可选的;如果未指定,约束将被认定为必填项。

“资源”和“目标”属性可以设置为“父”,以表明约束目标是小部件,使用 GtkConstraintLayout。

可以有“常量”和“乘数”属性。

此外,“约束”元素还可以包含由布局使用的 `GtkConstraintGuides` 描述

  <constraints>
    <guide min-width="100" max-width="500" name="hspace"/>
    <guide min-height="64" nat-height="128" name="vspace" strength="strong"/>
  </constraints>

“导引”元素具有以下可选属性

  • “”“min-width”、“nat-width”以及“max-width”,分别描述导引的最小宽度、自然宽度以及最大宽度
  • “”“min-height”、“nat-height”以及“max-height”,分别描述导引的最小高度、自然高度以及最大高度
  • “”“strength”描述导引自然大小的约束力量;如果未指定,将认定约束具有中等力量
  • “”“name”描述导引的名称,在调试时有用

使用可视格式语言

复杂约束可以使用紧凑的语法描述,称为 VFL可视格式语言

可视格式语言描述一行或一列的所有约束,通常从前缘开始朝后缘结束。布局的每个元素由“视图”组成,这些视图标识 GtkConstraintTarget

例如

  [button]-[textField]

描述一个约束,它将“按钮”的后缘绑定到“文本字段”的前缘,两者之间留有默认空白。

使用 VFL 还可以指定描述宽度和高度等属性的约束的谓词

  // Width must be greater than, or equal to 50
  [button(>=50)]

  // Width of button1 must be equal to width of button2
  [button1(==button2)]

除非另有指定,否则 VFL 描述的默认方向是水平的

  // horizontal orientation, default attribute: width
  H:[button(>=150)]

  // vertical orientation, default attribute: height
  V:[button1(==button2)]

还可以指定多个谓词以及它们的强度

  // minimum width of button must be 150
  // natural width of button can be 250
  [button(>=150@required, ==250@medium)]

最后,还可以使用简单的算术运算符

  // width of button1 must be equal to width of button2
  // divided by 2 plus 12
  [button1(button2 / 2 + 12)]

层级

hierarchy this GtkConstraintLayout implements_0 GtkBuildable this--implements_0 ancestor_0 GtkLayoutManager ancestor_0--this ancestor_1 GObject ancestor_1--ancestor_0

实现

构造函数

gtk_constraint_layout_new

创建新的 `GtkConstraintLayout` 布局管理器。

实例方法

gtk_constraint_layout_add_constraint

向布局管理器添加一个约束。

gtk_constraint_layout_add_constraints_from_description

根据 VFL 描述创建一个约束列表。

gtk_constraint_layout_add_constraints_from_descriptionv

根据 VFL 描述创建一个约束列表。

gtk_constraint_layout_add_guide

向 `layout` 添加一个导引。

gtk_constraint_layout_observe_constraints

返回一个 `GListModel` 以追踪作为布局一部分的约束。

gtk_constraint_layout_observe_guides

返回一个 `GListModel` 以追踪作为布局一部分的导引。

gtk_constraint_layout_remove_all_constraints

从布局管理器中移除所有约束。

gtk_constraint_layout_remove_constraint

从布局管理器中移除 `constraint`,因此它不再影响布局。

gtk_constraint_layout_remove_guide

从布局管理器中移除 `guide`,因此它不再影响布局。

继承自 GtkLayoutManager 的方法(6)
gtk_layout_manager_allocate

将给定的 `width`、`height` 和 `baseline` 分配给一个 `widget`,并使用 `manager` 的布局管理策略计算 `widget` 的子项的位置和大小。

gtk_layout_manager_get_layout_child

如果需要,为 GtkLayoutManager 检索一个 GtkLayoutChild 实例,并创建一个实例。

gtk_layout_manager_get_request_mode

检索 manager 的请求模式。

gtk_layout_manager_get_widget

使用给定的 GtkLayoutManager 检索 GtkWidget

gtk_layout_manager_layout_changed

如果存在,排入使用 managerGtkWidget 上的调整大小。

gtk_layout_manager_measure

使用 manager 度量 widget 的大小,针对给定的 orientation 和大小。

GObject 继承的方法 (43)

有关方法的完整列表,请参阅 GObject

GtkBuildable 继承的方法 (1)
gtk_buildable_get_buildable_id

获取 buildable 对象的 ID

信号

GObject 继承的信号 (1)
GObject::notify

当通过 g_object_set_property()、g_object_set() 等设置对象的一个属性值时,该对象上将发出 notify 信号。

类结构

struct GtkConstraintLayoutClass {
  GtkLayoutManagerClass parent_class;
  
}

暂无说明。

类成员
parent_class: GtkLayoutManagerClass

暂无说明。