多选框组件(CheckBox)

CheckBox是多选框组件,继承自Button。它由两部分组成,选择状态框及内容说明标签。其中选择状态框是图片资源,内容说明标签为文本。CheckBox组件的属性接口介绍请参考CheckBox API

一、通过LayaAir IDE创建CheckBox组件

1.1 创建CheckBox

如图1-1所示,点击选择小部件面板里的CheckBox组件,拖放到页面编辑区,或者在层级窗口中通过右键创建,即可添加CheckBox组件到页面上。

1-1

(图1-1)

CheckBox组件的选择状态框是图片资源,通常是三态或两态的图片资源。默认皮肤资源如下图所示:

1-2

(图1-2)

1.2 CheckBox属性

CheckBox的特有属性如下:

1-3

(图1-3)

属性名 功能说明
toggle 按下时是否切换组件的显示状态。为true时,可以通过点击切换显示状态。为false时,点击后会直接恢复初始状态。该属性一般不要改成false,否则永远都选不中
stateNum 选择框的皮肤状态数,支持两态和三态,多选框默认为三态。如果多选框美术资源改为两态,需设置状态值为2,正常情况下多选框至少应当有2个状态。特殊情况下,也可以使用单态
selected 多选框是否为选中状态,默认为false。设置为true后,多选框的初始状态会变为保持选中的状态
skin 选择框的图像资源,设置后需要根据皮肤资源设置stateNum皮肤状态数
sizeGrid 九宫格在CheckBox组件中无效,多选框的实际大小需在制作美术资源时就设置好
label 多选框的文本标签
labelFont 文本标签的字体
labelSize 文本标签的字体大小
labelBold 文本标签是否为粗体,默认为false
labelColors 鼠标在鼠标移出(up)、鼠标悬停(over),鼠标按下(down)时,各个状态下的文本标签颜色
labelAlign 文本标签的水平对齐模式:left、center、right,默认为居左对齐
labelVAlign 文本标签的垂直对齐模式:top、middle、bottom,默认为居顶对齐
labelPadding 文本标签的边距。格式:上边距、右边距、下边距、左边距
labelStroke 文本标签的描边宽度,以像素为单位。默认值为0,表示不描边
labelStrokeColor 文本标签描边的颜色,以字符串表示,默认值为#000000(黑色)
strokeColors 勾选后,可以根据状态设置文本的描边颜色。分三种状态进行设置:鼠标移出(up)、鼠标悬停(over),鼠标按下(down),三种状态可以设置不同的描边颜色

相对于单选框组件,多选框组件的特点是,选中之后可以恢复状态,如动图1-4所示。

1-4

(动图1-4)

其余属性与Button相同,开发者可以根据按钮组件的文档进行理解。

1.3 脚本控制CheckBox

在Scene2D的属性设置面板中,增加一个自定义组件脚本。然后,将CheckBox组件拖入到其暴露的属性入口中。需要添加如下的示例代码,实现脚本控制CheckBox:

const { regClass, property } = Laya;

@regClass()
export class NewScript extends Laya.Script {

    @property({ type: Laya.CheckBox })
    public checkbox: Laya.CheckBox;

    //组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
    onAwake(): void {
        this.checkbox.pos(300, 300);
        // this.checkbox.selected = true;
        this.checkbox.label = "多选框";
        this.checkbox.labelBold = true;
        this.checkbox.labelSize = 30;
        this.checkbox.labelColors = "#0100ff, #16fa0e, #ff0000"; //各状态下的文本颜色
        this.checkbox.labelStroke = 3;
        this.checkbox.strokeColors = "#000000, #c6ff00, #001aff"; //各状态下的描边颜色
    }
}

二、代码创建CheckBox

在进行书写代码的时候,免不了通过代码控制UI,创建UI_CheckBox类,并通过代码设定CheckBox相关的属性。下述示例演示了如何通过代码创建一个CheckBox组件并设置其属性。

示例代码如下:

const { regClass, property } = Laya;

@regClass()
export class UI_CheckBox extends Laya.Script {

    private COL_AMOUNT: number = 2;
    private ROW_AMOUNT: number = 3;
    private HORIZONTAL_SPACING: number = 200;
    private VERTICAL_SPACING: number = 100;
    private X_OFFSET: number = 100;
    private Y_OFFSET: number = 50;

    // 图片资源来自“引擎API使用示例”
    private skins: any[] = [
        "resources/res/ui/checkbox (1).png",
        "resources/res/ui/checkbox (2).png",
        "resources/res/ui/checkbox (3).png",
        "resources/res/ui/checkbox (4).png",
        "resources/res/ui/checkbox (5).png",
        "resources/res/ui/checkbox (6).png"
    ];
    constructor() {
        super();
    }

    /**
     * 组件被激活后执行,此时所有节点和组件均已创建完毕,此方法只执行一次
     */
    onAwake(): void {
        Laya.loader.load(this.skins).then(() => {
            this.onCheckBoxSkinLoaded();
        });
    }

    private onCheckBoxSkinLoaded(e: any = null): void {
        let cb: Laya.CheckBox;
        for (let i: number = 0; i < this.COL_AMOUNT; ++i) {
            for (let j: number = 0; j < this.ROW_AMOUNT; ++j) {
                cb = this.createCheckBox(this.skins[i * this.ROW_AMOUNT + j]);
                cb.selected = true;

                cb.x = this.HORIZONTAL_SPACING * i + this.X_OFFSET;
                cb.y += this.VERTICAL_SPACING * j + this.Y_OFFSET;

                // 给左边的三个CheckBox添加事件使其能够切换标签
                if (i == 0) {
                    cb.y += 20;
                    cb.on("change", this, this.updateLabel, [cb]);
                    this.updateLabel(cb);
                }
            }
        }
    }

    private createCheckBox(skin: string): Laya.CheckBox {
        let cb: Laya.CheckBox = new Laya.CheckBox(skin);
        this.owner.addChild(cb);

        cb.labelColors = "white";
        cb.labelSize = 20;
        cb.labelFont = "Microsoft YaHei";
        cb.labelPadding = "3,0,0,5";

        return cb;
    }

    private updateLabel(checkBox: Laya.CheckBox): void {
        checkBox.label = checkBox.selected ? "已选中" : "未选中";
    }
}

运行效果如下动图所示:

2-1

(动图2-1)

Copyright ©Layabox 2022 all right reserved,powered by LayaAir Engine更新时间: 2024-10-14 20:55:49

results matching ""

    No results matching ""