Toggle
Toggle 是一个可选中的 UI 组件——一个带有标记图标和可选标签的方形按钮。点击会切换其 on/off 状态。多个 Toggle 可以关联到一个 ToggleGroup 中,实现互斥(类似单选按钮)的选择。
在内部,Toggle 是一个水平 flex 行,包含一个 Button(可点击的方块,内部有标记图标)和一个 Label(文本标签)。两者均为内部子元素。
UIElement 中记录的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。
用法
XML
<!-- 带有可翻译标签的简单 Toggle -->
<toggle text="my.toggle.label"/>
<!-- 处于开启状态的 Toggle -->
<toggle text="my.toggle.label" is-on="true"/>
<!-- 空文本属性会隐藏标签(调用 noText()) -->
<toggle text=""/>
<!-- 样式内部元素 -->
<toggle text="my.toggle.label">
<internal index="0">
<!-- Button(方形方块)的属性 / 子元素 -->
</internal>
<internal index="1">
<!-- Label 的属性 -->
</internal>
</toggle>
| XML 属性 | 类型 | 描述 |
|---|---|---|
text |
string |
设置标签文本。传入空字符串以隐藏标签。 |
is-on |
boolean |
初始 on/off 状态。默认值:false。 |
内部结构
Toggle 包含两个内部元素:
| 索引 | 字段 | 类型 | CSS 类 | 描述 |
|---|---|---|---|---|
0 |
toggleButton |
Button |
.__toggle_button__ |
可点击的方形方块(包含标记图标)。 |
1 |
toggleLabel |
Label |
.__toggle_label__ |
方块右侧的文本标签。 |
标记图标位于 toggleButton 内部,可以通过 CSS 定位:
/* 样式化标记 / 取消标记图标 */
.__toggle_mark-icon__ {
/* 覆盖尺寸、内边距等 */
}
/* 专门定位标签 */
toggle > label.__toggle_label__ {
font-size: 9;
text-color: #CCCCCC;
}
Toggle 样式
ToggleStyle 控制方块按钮的纹理以及标记/取消标记图标。
base-background / hover-background
内部 Button 在空闲和悬停状态下的纹理(委托给 ButtonStyle)。
默认值:Sprites.RECT_DARK / Sprites.RECT_DARK + 白色边框
unmark-background
Toggle 处于关闭状态时,方块内部显示的图标。
默认值:无(透明)
mark-background
Toggle 处于开启状态时,方块内部显示的图标。
默认值:Icons.CHECK_SPRITE
Toggle Group
ToggleGroup 将多个 Toggle 实例关联起来,使得同一时间只有一个可以处于激活状态(类似单选按钮组)。当 allowEmpty 为 false(默认值)时,始终至少有一个 Toggle 处于激活状态。
var group = new Toggle.ToggleGroup();
// group.setAllowEmpty(true); // 允许所有 Toggle 都关闭
var t1 = new Toggle().setText("Option A", true).setToggleGroup(group);
var t2 = new Toggle().setText("Option B", true).setToggleGroup(group);
var t3 = new Toggle().setText("Option C", true).setToggleGroup(group);
group.getCurrentToggle(); // 当前激活的 Toggle(如果 allowEmpty 则为 null)
使用 ToggleGroupElement 通过 XML / 编辑器自动管理分组——在子元素添加时自动注册,移除时自动注销。
文本
setText / noText / enableText
控制 Toggle 方块右侧显示的标签。
值绑定
Toggle 继承自 BindableUIElement<Boolean>,因此可以与数据绑定系统集成:
详细信息请参阅 数据绑定。
字段
| 名称 | 类型 | 访问权限 | 描述 |
|---|---|---|---|
toggleButton |
Button |
public final |
内部可点击方块。 |
markIcon |
UIElement |
public final |
方块内部的图标元素。 |
toggleLabel |
Label |
public final |
右侧的标签元素。 |
toggleStyle |
ToggleStyle |
private(getter) |
当前 Toggle 样式。 |
isOn |
boolean |
private(getter) |
当前 on/off 状态。 |
toggleGroup |
ToggleGroup |
private(getter/nullable) |
此 Toggle 所属的分组。 |
方法
| 方法 | 返回 | 描述 |
|---|---|---|
setOn(boolean) |
Toggle |
设置 on/off 状态并通知监听器。 |
setToggleGroup(ToggleGroup) |
Toggle |
加入一个 ToggleGroup。传入 null 以离开分组。 |
setOnToggleChanged(BooleanConsumer) |
Toggle |
注册状态变化的监听器。 |
setText(String, boolean) |
Toggle |
设置标签文本。true = 可翻译。 |
noText() |
Toggle |
隐藏标签。 |
enableText() |
Toggle |
显示标签。 |
toggleStyle(Consumer<ToggleStyle>) |
Toggle |
以流式方式配置 ToggleStyle。 |
toggleButton(Consumer<Button>) |
Toggle |
直接配置内部 Button。 |
toggleLabel(Consumer<Label>) |
Toggle |
直接配置标签。 |
markIcon(Consumer<UIElement>) |
Toggle |
直接配置标记图标元素。 |
getValue() |
Boolean |
返回当前 on/off 状态。 |