UI组件基础使用与构成

Author: Charley

UI 组件是经典 UI 系统的核心构成,封装了大量常用且实用的界面功能,便于开发者高效构建各类用户界面。

1、什么是UI组件

从引擎类结构来看,UIComponent 是经典 UI 系统中所有 UI 组件的基类。也就是说,所有 UI 组件本质上都是继承自 UIComponent 的派生类,具备统一的接口和行为特征。

UI 组件按照功能类型可分为基础组件容器组件。其中,Box 及其所有子类被归类为容器组件,用于承载和布局其他 UI 节点;而除 Box 系列以外的组件,则通常属于基础组件,用于直接显示文本、图片、按钮等界面元素。

1.1 基础UI组件

基础UI组件显示对象,一共有17个,直接或间接继承于UIComponent,如图1-1的高亮部分所示。

1-1

(图1-1)

1.2 容器组件

继承于Box的组件,加上Box容器本身,容器对象一共有9个。如图1-2的高亮部分所示。

1-2

(图1-2)

这些容器单单自己是没有意义的,必须要包括基础的UI组件作为子节点,才能使得组件功能完整。

例如,List必须要有基础UI组件作为列表的渲染单元,单选框组(RadioGroup)是多个单选框(Radio)组件的容器。

1.3 弹窗视图组件

从引擎的类结构上看,弹窗视图组件 Dialog 并不继承自 UIComponent,因此在严格意义上不属于 UI 组件体系中的一员,其继承关系如图 1-3 所示。

1-3

(图1-3)

但在功能上,Dialog 是经典 UI 系统中使用频率极高的组件之一,所在IDE创建UI组件时,也归类在其中。常用于弹窗界面、提示窗口、对话框等应用场景。

2、UI组件的使用

UI组件的创建有三种方式:分别是从小部件(Widgets)面板里拖拽UI组件使用、从层级管理(Hierarchy)面板的右键菜单里创建、通过组件资源命名规则为资源命名,然后拖拽资源使用,直接被IDE识别。

2.1 小部件面板中拖拽

小部件(Widgets)面板里包括了基础节点,也包括了UI组件,使用时直接拖拽到层级面板或场景编辑窗口内即可。效果如动图2-1所示。

(动图2-1)

2.2 层级右键菜单中创建

层级管理(Hierarchy)面板的2D节点下,右键菜单里也可以直接创建UI组件,效果如图2-2所示。

2-2

(图2-2)

2.3 资源面板中拖拽

如果资源命名符合 UI 组件命名规则(具体规则可参见相关文档),则在将其拖拽到层级面板或场景视图时,IDE 会自动创建对应的 UI 组件,如图 2-3 所示。

(图2-3)

3、UI组件基类属性

在 UI 组件中,相对布局数据源绑定灰化显示(变灰)以及禁用鼠标事件等,都是 UI 系统特有的功能属性。这些能力在 2D 基础对象(如 Sprite)中并不具备。

3.1 相对布局layout

如图 3-1 所示,每个 UI 组件都具备一组用于相对定位的布局属性。而基础显示对象(如 Sprite)仅支持绝对布局

3-1

(图3-1)

在相对布局中,UI 组件的位置是相对于其父节点来计算的。这种布局方式提供了高度的灵活性,能在不同屏幕尺寸和方向下自动适配,确保界面元素在各类设备上的一致性与可用性。

代码中的使用示例如下:

this.xx.left = 0;
this.xx.right = 0;
this.xx.top = 0;
this.xx.bottom = 0;
this.xx.CenterX = 0;
this.xx.CenterY = 0;

3.2 数据源dataSource

在实际开发中,从网络获取的数据有时候与 UI 组件预期的数据结构不完全一致,尤其在处理列表组件时更为常见。此时可以通过设置组件的 dataSource,对原始数据进行结构调整,使其满足列表渲染所需的格式。

示例代码如下:

import { ItemBoxBase } from "./ItemBox.generated";

const { regClass, property } = Laya;

@regClass()
export class Script extends ItemBoxBase {
      constructor() {
        super();
    }

    get dataSource(): any {
        return super.dataSource;
    }
    set dataSource(value: any) {
        super.dataSource = value;
        if (!value) return;

        //把数据源里的值,给到子节点属性
        if (value.avatar) {
            let redHot = this.getChildByName("avatar").getChildByName("redHot") as Laya.Image;
            redHot.visible = value.avatar.redHot.visible;
        }

        if (value.flag) {
            let flagText = this.getChildByName("flag").getChildByName("flagText") as Laya.Text;
            flagText.text = value.flag.flagText.text;
        }
    }
}

3.3 变灰与禁用鼠标事件

在 UI 组件中,设置 gray 属性可使组件进入灰化状态,将具有颜色的元素以灰色形式显示,如图3-2所示。用于提示“不可用”或“非当前状态”。

而设置 disabled 属性,则不仅会禁用鼠标交互(例如点击按钮无响应),还会自动将组件强制切换为灰化显示。这种视觉反馈可以让用户明显感知到该组件当前处于不可操作状态。

代码使用示例如下:

this.xx.disabled = true;
Copyright ©Layabox 2025 all right reserved,powered by LayaAir Engine更新时间: 2025-07-11 16:57:03

results matching ""

    No results matching ""