05:组件
组件是构建页面的核心,每个组件通过对数据和方法的简单封装,实现独立的可视、可交互功能单元。组件之间相互独立,随取随用,也可以在需求相同的地方重复使用。
本章主要讲述基于ArkTS的声明式开发范式的相关组件。让大家能够了解常用组件的功能,使用组件进行UI界面的搭建,熟悉组件的核心属性和事件等。
组件通用信息
通用事件
- 点击事件
组件被点击时触发的事件。
// 点击动作触发该回调
onClick(event: (event?: ClickEvent) => void)
// src/main/ets/pages/common/Click.ets
@Entry
@Component
struct ClickExample {
@State text: string = ''
build() {
Column() {
Row({ space: 20 }) {
Button('Click', {type: ButtonType.Normal}).width(100).height(50)
.onClick((event: ClickEvent) => {
this.text = 'Click Point:' + '\n screenX:' + event.screenX + '\n screenY:' + event.screenY
+ '\n x:' + event.x + '\n y:' + event.y + '\ntarget:' + '\n width:'
+ event.target.area.width + '\n height:' + event.target.area.height + '\ntimestamp' + event.timestamp;
})
Button('Click', {type: ButtonType.Normal}).width(200).height(50)
.onClick((event: ClickEvent) => {
this.text = 'Click Point:' + '\n screenX:' + event.screenX + '\n screenY:' + event.screenY
+ '\n x:' + event.x + '\n y:' + event.y + '\ntarget:' + '\n width:'
+ event.target.area.width + '\n height:' + event.target.area.height + '\ntimestamp' + event.timestamp;
}).margin({top: 20})
}.margin(0)
Text(this.text).margin(15).fontSize(26)
}.width('100%').alignItems(HorizontalAlign.Start)
}
}
- 触摸事件
当手指在组件上按下、滑动、抬起时触发。
// 手指触摸动作触发该回调
onTouch(event: (event?: TouchEvent) => void)

// src/main/ets/pages/common/Touch.ets
@Entry
@Component
struct TouchExample {
@State text: string = ''
@State eventType: string = ''
build() {
Column() {
Button('Touch').height(40).width(100)
.onTouch((event: TouchEvent) => {
if (event.type === TouchType.Down) {
this.eventType = 'Down'
}
if (event.type === TouchType.Up) {
this.eventType = 'Up'
}
if (event.type === TouchType.Move) {
this.eventType = 'Move'
}
this.text = 'TouchType:' + this.eventType + '\nx: '
+ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nwidth:'
+ event.target.area.width + '\nheight:' + event.target.area.height
})
Button('Touch').height(50).width(200).margin(20)
.onTouch((event: TouchEvent) => {
if (event.type === TouchType.Down) {
this.eventType = 'Down'
}
if (event.type === TouchType.Up) {
this.eventType = 'Up'
}
if (event.type === TouchType.Move) {
this.eventType = 'Move'
}
this.text = 'TouchType:' + this.eventType + '\nx: '
+ event.touches[0].x + '\n' + 'y: ' + event.touches[0].y + '\nwidth:'
+ event.target.area.width + '\nheight:' + event.target.area.height
})
Text(this.text).fontSize(26)
}.width('100%').padding(30)
}
}
- 按键事件
按键事件指组件与键盘、遥控器等按键设备交互时触发的事件(仅适用于所有可获焦组件,例如 Button)。
// 绑定该方法的组件获焦后,按键动作触发该回调
onKeyEvent(event: (event?: KeyEvent) => void)

// src/main/ets/pages/common/KeyEvent.ets
@Entry
@Component
struct KeyEventExample {
@State text: string = ''
@State eventType: string = ''
build() {
Column() {
Button('KeyEvent')
.onKeyEvent((event: KeyEvent) => {
if (event.type === KeyType.Down) {
this.eventType = 'Down'
}
if (event.type === KeyType.Up) {
this.eventType = 'Up'
}
this.text = 'KeyType:' + this.eventType + '\nkeyCode:' + event.keyCode + '\nkeyText:' + event.keyText
})
Text(this.text).padding(15).fontSize(26)
}.height(300).width('100%').padding(35)
}
}
通用属性
- 尺寸设置
用于设置组件的宽高、边距。


// src/main/ets/pages/common/Width.ets
// common/Width.ets
@Entry
@Component
struct WidthExample {
build() {
Column() {
Text("margin and padding:").fontSize(26).fontColor(0x3E3E3E).width('90%')
Text("锦瑟无端五十弦,一弦一柱思华年。").fontSize(26).fontColor(0xFFFFFF).width('90%').backgroundColor(Color.Blue)
Row() {
Row() {
Text("帝心").fontSize(26).fontColor(0x3E3E3E)
}
.height(260)
.backgroundColor(Color.Blue)
// width: 200, height: 200, padding: 10, margin: 20
Row() {
Row() {
Text("帝心帝心帝心帝心帝心帝心帝心帝心帝心帝心").fontSize(26).fontColor(0x3E3E3E).width('90%')
}
.width('100%')
.height('100%')
.backgroundColor(Color.Yellow)
}
.width(200)
.height(200)
.padding(20)
.margin(30)
.border({width: 10, color: Color.Red})
.backgroundColor(Color.Gray)
Row() {
Text("庄生").fontSize(26).fontColor(0x3E3E3E)
}
}
Text("庄生晓梦迷蝴蝶,望帝春心托杜鹃。").fontSize(26).fontColor(0xFFFFFF).width('90%').backgroundColor(Color.Blue)
}
}
}