HarmonyOS NEXT鸿蒙开发ArkUI:通用属性(尺寸、布局、外边距、内边距、对齐、定位、显示、可见性、背景、边框) 作者:马育民 • 2025-10-22 22:40 • 阅读:10003 # 介绍 在 ArkUI 的声明式开发范式中,**通用属性**(Common Attributes)是指那些可以应用于**绝大多数组件**(如 `Text`, `Button`, `Image`, `Column`, `Row` 等)的基础性属性。它们不决定组件的核心功能,而是用于控制组件的外观、布局、交互等通用行为。 掌握这些通用属性是进行 ArkUI 开发的基础,因为它们贯穿于所有 UI 构建过程中。 --- ### 尺寸属性 这类属性控制组件自身的尺寸以及在父容器中的布局行为。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.width(value)`** | `Length` | 设置组件的宽度。`value` 可以是具体的数值(如 `200`)、带单位的字符串(如 `'200px'`)、百分比(如 `'50%'`)或弹性份数(如 `'1fr'`)。 | | **`.height(value)`** | `Length` | 设置组件的高度。用法同 `.width()`。 | | **`.size(width, height)`** | `(width: Length, height?: Length)` | 同时设置组件的宽度和高度。如果只传一个参数,则宽高相等。 | | **`.minWidth(value)`** | `Length` | 设置组件的最小宽度。当内容或布局约束导致宽度小于该值时,组件不会更窄。 | | **`.maxWidth(value)`** | `Length` | 设置组件的最大宽度。限制组件不会超过此宽度。 | | **`.minHeight(value)`** | `Length` | 设置组件的最小高度。 | | **`.maxHeight(value)`** | `Length` | 设置组件的最大高度。 | ### 布局属性 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.layoutWeight(weight)`** | `number` | (主要用于 `Row`/`Column` 的子组件)设置组件在主轴方向上的**弹性伸缩权重**。类似于 CSS Flexbox 的 `flex-grow`。值越大,可伸展的空间越多。 | --- ### 外边距与内边距 (Margin & Padding) 控制组件周围的空白区域。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.margin(value)`** | `Length \ Margin` | 设置组件的**外边距**(组件边界到其相邻元素的距离)。`value` 可以是: | | | | - 单个值:四周边距相同。 | | | | - 数组 `[top, right, bottom, left]` 或 `[vertical, horizontal]`。 | | | | - 对象 `{ top?: number, right?: number, bottom?: number, left?: number }`。 | | **`.padding(value)`** | `Length \ Padding` | 设置组件的**内边距**(组件边界到其内容的距离)。用法与 `.margin()` 完全相同。 | **示例**: ```ts Text('Hello') .margin({ top: 10, bottom: 10 }) // 上下边距10px .padding('16px') // 四周内边距16px ``` --- ### 对齐与定位属性 控制组件内部或与其他组件的对齐方式。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.align(alignment)`** | `Alignment` | 设置组件在其父容器分配的空间内的**对齐方式**。常用值有: | | | | - `Alignment.TopStart`, `Top`, `TopEnd` | | | | - `Alignment.CenterStart`, `Center`, `CenterEnd` | | | | - `Alignment.BottomStart`, `Bottom`, `BottomEnd` | | **`.alignSelf(alignment)`** | `Alignment` | (仅用于 `Flex`/`Grid` 布局的子组件)覆盖父容器的 `alignItems`,设置**自身在交叉轴上的对齐方式**。 | | **`.position({ x, y })`** | `{ x?: Length, y?: Length }` | 设置组件相对于其**父容器左上角**的绝对位置。常用于 `Stack` 布局中精确定位。 | | **`.offset({ x, y })`** | `{ x?: Length, y?: Length }` | 设置组件相对于其**原始位置**的偏移量。正数向右/下,负数向左/上。 | --- ### 显示与可见性属性 控制组件是否显示。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.visibility(state)`** | `'Visible' \ 'Hidden' \ 'None'` | 控制组件的可见性: | | | | - `'Visible'`: 正常显示。 | | | | - `'Hidden'`: 隐藏,但**仍占据布局空间**。 | | | | - `'None'`: 隐藏,且**不占据布局空间**(相当于从布局树中移除)。 | | **`.opacity(value)`** | `number` | 设置组件的**透明度**。`value` 范围 `0.0` (完全透明) 到 `1.0` (完全不透明)。 | --- ### 背景与边框属性 为组件添加背景和边框样式。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.backgroundColor(color)`** | `ResourceColor` | 设置组件的背景颜色。可以是颜色常量(如 `Color.Blue`)、十六进制字符串(如 `'#FF0000'`)或资源引用。 | | **`.backgroundImage(src)`** | `ResourceStr` | 设置组件的背景图片。`src` 可以是本地路径(如 `'./images/bg.png'`)或网络 URL。 | | **`.backgroundImageSize(size)`** | `ImageSize` | 设置背景图片的尺寸。常用值:`'cover'`, `'contain'`, `'auto'`, 或具体尺寸如 `{ width: '100%', height: '100%' }`。 | | **`.backgroundImagePosition(x, y)`** | `(x?: Length, y?: Length)` | 设置背景图片的位置。 | | **`.borderWidth(width)`** | `Length \| BorderStyle` | 设置边框宽度。也可以直接传对象设置四边不同宽度。 | | **`.borderColor(color)`** | `ResourceColor \| BorderColor` | 设置边框颜色。 | | **`.borderRadius(radius)`** | `Length` | 设置边框圆角半径,实现圆角效果。 | | **`.border(style)`** | `BorderOptions` | **综合设置边框**,可以一次性设置宽度、颜色、样式(实线、虚线等)。 | **示例**: ```ts Column() .width('80%') .height(200) .backgroundColor(Color.Gray) .borderRadius(12) .border({ width: 2, color: Color.Blue, style: BorderStyle.Dashed }) ``` --- ### 交互与手势类属性 虽然更复杂的手势通常通过 `Gesture` API 添加,但一些基础交互也作为通用属性提供。 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.onClick(event)`** | `(event: ClickEvent) => void` | 点击事件回调。这是最常用的交互属性。 | | **`.enabled(enabled)`** | `boolean` | 设置组件是否**启用**。禁用状态通常表现为灰色且无交互响应。 | | **`.focusable(focusable)`** | `boolean` | 设置组件是否可获得焦点。 | | **`.tabIndex(index)`** | `number` | 设置组件在 Tab 键导航中的顺序。 | --- ### 其他常用通用属性 | 属性 | 类型 | 描述 | | :--- | :--- | :--- | | **`.id(id)`** | `string` | 为组件设置唯一标识符。虽然在声明式 UI 中不常用于查找,但在某些场景(如动画、特定逻辑)下有用。 | | **`.key(key)`** | `string \ number` | 在列表 (`List`) 或条件渲染中,帮助框架高效地识别和更新组件。对于动态列表,强烈建议为每个项目设置唯一的 `key`。 | | **`.aspectRatio(ratio)`** | `number` | 设置组件的**宽高比**。例如 `.aspectRatio(1)` 创建一个正方形,`.aspectRatio(16 / 9)` 创建一个 16:9 的矩形。组件会根据可用空间按此比例调整尺寸。 | --- ### 总结 ArkUI 的通用属性体系设计得非常清晰和一致: * **链式调用**:所有属性都通过点语法 `.` 追加,形成流畅的链式调用。 * **类型安全**:在 ArkTS (TypeScript) 环境下,属性的参数类型有良好定义,提供代码提示和错误检查。 * **组合性强**:你可以自由组合这些通用属性来构建出复杂的 UI 效果。 * **语义化**:属性名称直观,易于理解。 在实际开发中,你几乎每天都会使用这些通用属性。熟练掌握它们,能让你更快速、更高效地构建出符合设计要求的 HarmonyOS 应用界面。 原文出处:http://www.malaoshi.top/show_1GW25cCWurcQ.html