formLayout 表单布局
formLayout 在响应式的列布局中排列表单字段。
XML 元素 |
|
|---|---|
Java 类 |
|
基本用法
默认的响应式布局规则是,在宽度小于 40em 按一列布局,宽度在 40em 或以上按两列布局:
<formLayout>
<textField label="TextField"/>
<dateTimePicker label="DateTimePicker"/>
<textArea label="TextArea"/>
<checkbox label="Checkbox"/>
<textArea label="TextArea with column span" colspan="2"/>
<passwordField label="PasswordField"/>
<emailField label="EmailField"/>
</formLayout>
数据感知的 formLayout
在 formLayout 上设置 dataContainer 属性,可以将其内部字段与 实例容器 中的实体绑定。每个字段使用 property 选择显示的实体属性。
<data>
<collection id="customersDc"
class="io.jmix.uisamples.entity.Customer"
fetchPlan="_local">
<loader id="customersLoader">
<query>
<![CDATA[select e from Customer e]]>
</query>
</loader>
</collection>
<instance id="customerDc"
class="io.jmix.uisamples.entity.Customer"/>
</data>
<facets>
<dataLoadCoordinator auto="true"/>
</facets>
<layout>
<select id="customerSelect" label="Customer" itemsContainer="customersDc"
helperText="Select a customer to display"/>
<formLayout dataContainer="customerDc">
<textField property="name"/>
<textField property="lastName"/>
<integerField property="age"/>
<checkbox property="active"/>
<select property="grade"/>
</formLayout>
</layout>
自动响应模式
设置 autoResponsive="true" 时,formLayout 根据可用宽度、配置的列宽和空间来确定列数。每个 formRow 表示一个新行。如果其字段无法适配宽度,会自动换到下一行(为 formRow 保留的行)。
| 当自动响应模式启用时,会忽略 响应式列数。 |
<formLayout id="formLayout" width="100%" classNames="form-layout" autoResponsive="true">
<formRow>
<formItem label="msg://firstName.label">
<textField/>
</formItem>
<formItem label="msg://lastName.label">
<textField/>
</formItem>
<formItem label="msg://rating.label">
<comboBox id="ratingField"/>
</formItem>
</formRow>
<formRow>
<formItem label="msg://countryName.label">
<textField/>
</formItem>
<formItem label="msg://birthDate.label">
<datePicker/>
</formItem>
<formItem label="msg://email.label">
<emailField/>
</formItem>
</formRow>
<formRow>
<formItem label="msg://status.label">
<comboBox/>
</formItem>
<formItem label="msg://phoneNumber.label">
<textField/>
</formItem>
<formItem label="msg://address.label">
<textField/>
</formItem>
</formRow>
</formLayout>
对于没有显式配置 formRow 元素而需要自动分配时,请设置 autoRows="true"。minColumns、maxColumns、columnWidth、columnSpacing、rowSpacing、expandColumns 和 expandFields 元素可以微调生成的网格如何使用可用空间。
响应式档位模式
使用内部的 responsiveStep 元素指定在特定的最小宽度时,需显示的列数和标签位置。通过可用的档位控制布局的呈现。
<formLayout>
<responsiveSteps>
<responsiveStep minWidth="0" columns="1" labelsPosition="TOP"/>
<responsiveStep minWidth="30em" columns="1" labelsPosition="ASIDE"/>
<responsiveStep minWidth="40em" columns="2" labelsPosition="TOP"/>
<responsiveStep minWidth="50em" columns="2" labelsPosition="ASIDE"/>
<responsiveStep minWidth="60em" columns="4" labelsPosition="TOP"/>
</responsiveSteps>
<formItem label="TextField">
<textField/>
</formItem>
<formItem label="DateTimePicker">
<dateTimePicker/>
</formItem>
<formItem label="TextArea">
<textArea/>
</formItem>
<formItem label="Checkbox">
<checkbox/>
</formItem>
<formItem label="TextArea with column span" colspan="2">
<textArea/>
</formItem>
<formItem label="PasswordField">
<passwordField/>
</formItem>
<formItem label="EmailField">
<emailField/>
</formItem>
</formLayout>
XML 属性
通用属性 对所有组件都是一样的配置。
下面是 formLayout 的特殊属性:
| 名称 | 描述 | 默认值 |
|---|---|---|
布局根据其容器的可用宽度自动计算和调整列数。参阅 自动响应模式。 |
|
|
配置布局是否应自动将字段分布到各列,顺序填充每行后再换到下一行。此属性仅在启用 autoResponsive 时有效。参阅 自动响应模式。 |
|
|
为所有列定义固定宽度。值必须是有效的 CSS 长度单位(例如 |
|
|
使用 CSS 长度单位定义列之间的间距。 |
— |
|
启用后,列会均匀分布以填充初始列计算后剩余的水平空间。此属性仅在启用 autoResponsive 时有效。参阅 自动响应模式。 |
|
|
启用后,字段会拉伸以填充其所在列的所有可用宽度。这也适用于包裹在 |
|
|
指定布局中的 |
|
|
当标签放在字段旁边时,定义标签与对应字段之间的间距(CSS 长度)。例如 |
— |
|
为默认响应式档位配置标签位置,也应用于不带 - - |
|
|
设置侧置标签的宽度(CSS 长度)。例如 |
— |
|
设置布局可以创建的最大列数。即使有足够空间,实际列数也不会超过此限制。此属性仅在启用 autoResponsive 时有效。参阅 自动响应模式。 |
10 |
|
设置布局将创建的最小列数,无论容器宽度如何。此属性仅在启用 autoResponsive 时有效。参阅 自动响应模式。 |
1 |
|
定义行之间的间距( CSS 长度)。 |
— |
事件和处理器
下面是 formLayout 的特殊事件和处理器:
| 名称 | 描述 |
|---|---|
当用户点击布局时触发。 |
|
用户点击后,当确认不是双击时触发。 |
|
当用户双击布局时触发。 |
下面是 formLayout 支持的其他通用事件:
XML 内部元素
一个 formLayout 可以直接包含字段组件或由 formItem 和 formRow 元素包裹的字段组件。responsiveSteps 元素及其内部的 responsiveStep 定义 响应式档位。