项目已开源,开源地址: https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial , 欢迎fork & star
效果演示
引言
在上一篇教程中,我们学习了如何使用RowSplit
和ColumnSplit
组件构建设置中心的基础布局结构。本篇教程将深入探讨如何使用@Builder
装饰器创建可复用的UI构建函数,以及如何实现账户设置和通知设置的详细内容,从而打造一个功能完整的设置中心界面。
@Builder装饰器介绍
在HarmonyOS NEXT中,@Builder
装饰器是一个强大的工具,它允许我们定义可复用的UI构建函数。这些函数可以在组件的build
方法中多次调用,从而实现UI代码的模块化和复用。
@Builder
装饰器的基本语法如下:
@Builder
private functionName() {
// UI构建代码
}
在我们的设置中心案例中,我们使用@Builder
装饰器定义了两个UI构建函数:buildAccountSettings
和buildNotificationSettings
,分别用于构建账户设置和通知设置的界面。
账户设置界面实现
首先,我们来看一下账户设置界面的实现:
@Builder
private buildAccountSettings() {
Column() {
List({ space: 12 }) {
ListItem() {
Row() {
Text('华为账号').fontSize(18)
Blank()
Text('已绑定').fontColor('#999')
}
}
ListItem() {
Row() {
Text('手机号').fontSize(18)
Blank()
Text('138****8888').fontColor('#999')
}
}
ListItem() {
Row() {
Text('安全中心').fontSize(18).width('40%')
Blank()
Image($r('app.media.arrowright'))
.width(12)
.height(12)
}.height(40)
.justifyContent(FlexAlign.SpaceBetween)
}
}
}
}
在这段代码中:
- 我们使用
@Builder
装饰器定义了一个名为buildAccountSettings
的私有方法 - 方法内部使用
Column
组件作为容器,包含一个List
组件 List
组件设置了项目间距为12,包含三个ListItem
- 每个
ListItem
内部都是一个Row
组件,用于水平排列内容 - 第一个和第二个
ListItem
显示账号和手机号信息,使用Blank
组件在左右两侧的文本之间创建弹性空间 - 第三个
ListItem
显示安全中心选项,右侧有一个箭头图标,表示可以点击进入下一级界面
List组件的使用
在账户设置界面中,我们使用了List
和ListItem
组件来创建列表。List
组件是HarmonyOS提供的用于显示列表数据的容器组件,它可以包含多个ListItem
子组件。
List
组件的基本用法如下:
List({ space: spacing }) {
// ListItem子组件
}
其中,space
参数指定列表项之间的间距。
Row与Blank组件的配合使用
在每个ListItem
中,我们使用了Row
和Blank
组件的组合来实现两端对齐的布局:
Row() {
Text('华为账号').fontSize(18)
Blank()
Text('已绑定').fontColor('#999')
}
Blank
组件会占据Row
中的所有可用空间,从而将左右两侧的文本推向两端。这是实现两端对齐布局的一种简单而有效的方式。
使用justifyContent属性
在第三个ListItem
中,我们使用了另一种方式来实现两端对齐:
Row() {
Text('安全中心').fontSize(18).width('40%')
Blank()
Image($r('app.media.arrowright'))
.width(12)
.height(12)
}.height(40)
.justifyContent(FlexAlign.SpaceBetween)
这里,我们为Row
组件设置了justifyContent(FlexAlign.SpaceBetween)
属性,这会使得Row
中的子组件均匀分布,第一个子组件靠左,最后一个子组件靠右,中间的空间均匀分布。
通知设置界面实现
接下来,我们来看一下通知设置界面的实现:
@Builder
private buildNotificationSettings() {
Column() {
ForEach(['应用通知', '消息提醒', '系统更新'], (item:string) => {
Row() {
Toggle({ type: ToggleType.Switch })
.margin({ right: 15 })
Text(item).fontSize(18)
}.margin({ bottom: 20 })
})
}
}
在这段代码中:
- 我们使用
@Builder
装饰器定义了一个名为buildNotificationSettings
的私有方法 - 方法内部使用
Column
组件作为容器 - 使用
ForEach
循环遍历一个字符串数组,为每个通知类型创建一个包含开关和文本的行 - 每一行都是一个
Row
组件,包含一个Toggle
开关和一个Text
文本 Toggle
组件设置了类型为ToggleType.Switch
,表示显示为开关样式,右侧有15的边距- 每个
Row
组件设置了底部边距为20,使得各行之间有足够的间隔
Toggle组件的使用
在通知设置界面中,我们使用了Toggle
组件来创建开关控件。Toggle
组件是HarmonyOS提供的用于创建开关控件的组件,它可以用于表示开/关、是/否等二元状态。
Toggle
组件的基本用法如下:
Toggle({ type: ToggleType.Switch })
其中,type
参数指定开关的类型,ToggleType.Switch
表示显示为开关样式。
ForEach的灵活应用
在通知设置界面中,我们使用了ForEach
来遍历一个字符串数组,为每个元素创建相同结构的UI:
ForEach(['应用通知', '消息提醒', '系统更新'], (item:string) => {
Row() {
Toggle({ type: ToggleType.Switch })
.margin({ right: 15 })
Text(item).fontSize(18)
}.margin({ bottom: 20 })
})
这种方式可以大大减少重复代码,使得UI构建更加简洁和可维护。当需要添加或删除通知类型时,只需修改数组即可,无需修改UI构建代码。
动态内容切换的实现
在设置中心的右侧内容区,我们根据左侧选中的菜单项动态切换显示不同的内容:
// 内容区(根据选择动态变化)
if (this.selectedMenu === '账户') {
this.buildAccountSettings()
} else if (this.selectedMenu === '通知') {
this.buildNotificationSettings()
}
这里,我们使用条件语句根据selectedMenu
的值来决定调用哪个@Builder
方法。当selectedMenu
的值为'账户'时,调用buildAccountSettings
方法构建账户设置界面;当值为'通知'时,调用buildNotificationSettings
方法构建通知设置界面。
这种方式实现了界面的动态切换,使得用户可以通过点击左侧菜单来查看不同类别的设置。
完整代码分析
让我们来看一下设置中心的完整代码:
@Component
export struct SettingsCenter {
@State selectedMenu: string = '账户'
build() {
RowSplit() {
// 左侧菜单 (40%)
Column() {
Text('设置中心').fontSize(20).margin({ top: 20, bottom: 30 })
ForEach(['账户', '通知', '隐私', '显示', '存储', '关于'], (item:string) => {
Button(item)
.width('90%')
.stateEffect(this.selectedMenu === item)
.margin({ bottom: 12 })
.onClick(() => { this.selectedMenu = item })
})
}.width('40%').backgroundColor('#f5f5f5')
// 右侧内容区 (60%)
ColumnSplit() {
// 标题区
Text(this.selectedMenu + '设置')
.fontSize(24)
.margin({ top: 20, bottom: 20 })
// 内容区(根据选择动态变化)
if (this.selectedMenu === '账户') {
this.buildAccountSettings()
} else if (this.selectedMenu === '通知') {
this.buildNotificationSettings()
}
// 底部操作按钮
Button('保存设置')
.width('90%')
.margin(20)
}.width('60%')
}
}
@Builder
private buildAccountSettings() {
// 账户设置界面
}
@Builder
private buildNotificationSettings() {
// 通知设置界面
}
}
这段代码展示了一个完整的设置中心组件,包括:
- 使用
@Component
装饰器定义一个自定义组件 - 使用
@State
声明状态变量,用于跟踪当前选中的菜单项 - 在
build
方法中使用RowSplit
和ColumnSplit
组件构建布局结构 - 使用
@Builder
装饰器定义可复用的UI构建函数 - 根据状态变量的值条件渲染不同的内容
布局组件的嵌套使用
在这个案例中,我们看到了布局组件的嵌套使用:
- 最外层是
RowSplit
组件,将界面分为左右两部分 - 左侧使用
Column
组件垂直排列菜单项 - 右侧使用
ColumnSplit
组件,将内容区垂直分割为三个部分 - 在账户设置界面中,使用
Column
、List
、ListItem
和Row
组件构建复杂的列表布局 - 在通知设置界面中,使用
Column
和Row
组件构建开关列表
这种嵌套使用方式展示了HarmonyOS布局系统的灵活性和强大性,可以通过组合不同的布局组件来构建复杂的界面结构。
小结
在本教程中,我们深入探讨了如何使用@Builder
装饰器创建可复用的UI构建函数,以及如何实现账户设置和通知设置的详细内容。 在实际应用开发中,你可以根据自己的需求扩展这个设置中心,添加更多的设置类别和选项,或者调整布局和样式,打造出符合你应用风格的设置界面。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。