Skip to content

Switch

自 2.2.1

Switch 是一个带动画效果的开/关切换器,外观呈滑动胶囊状。切换时,内部的指示器会从一端平滑滑到另一端,带有流畅的 CSS 过渡效果。它本身没有文字标签——如果你需要描述性文字,请使用 LabelToggle

从内部结构来看,Switch 是一个水平 flex 行,包含一个 flex 占位元素placeholder)和一个 方形指示器markIcon)。切换时,占位元素的 flex 值从 0 增长到 1,将指示器推至另一侧。

INFO

UIElement 中介绍的所有内容(布局、样式、事件、数据绑定等)同样适用于此处。


用法

java
var sw = new Switch();
sw.setOn(true);
sw.setOnSwitchChanged(isOn -> {
    // 当状态变化时调用
});
parent.addChild(sw);

XML

xml
<!-- 默认关闭状态的 Switch -->
<switch/>

<!-- 开启状态的 Switch -->
<switch is-on="true"/>
XML 属性类型描述
is-onboolean初始开/关状态。默认值:false

内部结构

Switch 包含两个内部元素:

索引字段类型CSS 类描述
0placeholderUIElement控制指示器滑动的 flex 占位元素。
1markIconUIElement.__switch_mark-icon__滑动的方形指示器。

Switch 样式

SwitchStyle 控制四张纹理:容器在两种状态下的背景,以及指示器在两种状态下的纹理。

INFO

base-background

Switch 处于关闭状态时的容器背景。

默认值:Sprites.RECT_RD_DARK

java
sw.switchStyle(style -> style.baseTexture(myOffBg));

INFO

pressed-background

Switch 处于开启状态时的容器背景。

默认值:Sprites.RECT_RD_T

java
sw.switchStyle(style -> style.pressedTexture(myOnBg));

INFO

unmark-background

Switch 处于关闭状态时,滑动指示器的纹理。

默认值:Sprites.RECT_RD

java
sw.switchStyle(style -> style.unmarkTexture(myOffIndicator));

INFO

mark-background

Switch 处于开启状态时,滑动指示器的纹理。

默认值:Sprites.RECT_RD

java
sw.switchStyle(style -> style.markTexture(myOnIndicator));

值绑定

Switch 继承自 BindableUIElement&lt;Boolean&gt;,因此它可以与数据绑定系统集成:

java
sw.bind(DataBindingBuilder.bool(
    () -> config.isEnabled(),
    val -> config.setEnabled(val)
).build());

详细信息请参阅 数据绑定


字段

名称类型访问权限描述
placeholderUIElementpublic final驱动滑动动画的 flex 占位元素。
markIconUIElementpublic final可见的滑动指示器。
switchStyleSwitchStyleprivate (getter)当前 Switch 样式。
isOnbooleanprivate (getter)当前开/关状态。

方法

方法返回描述
setOn(boolean)Switch设置开/关状态并通知监听器。
setOnSwitchChanged(BooleanConsumer)Switch注册状态变化的监听器。
switchStyle(Consumer&lt;SwitchStyle&gt;)Switch以流式方式配置 SwitchStyle
getValue()Boolean返回当前开/关状态。

Released under the MIT License.