代码如下:
@Entry
@Component
struct Hello {
// 推荐列表
@State hotSearchList: string[] = ['女装', '鞋子', '军大衣', '花棉袄', 'Flutter教程', 'HarmonyOS', 'ArkTS', '高跟鞋', '电脑', '华为手机']
// 控制按钮显示的布尔值
@State isShow: boolean = false
build() {
// 堆叠布局
Stack({ alignContent: Alignment.BottomEnd }) {
// 标题与滑动列表
Column() {
// 标题
Text('精品推荐')
.width('100%')
.height(60)
.fontSize(40)
.textAlign(TextAlign.Center)
// 滑动列表
List() {
ForEach(this.hotSearchList, item => {
ListItem() {
Text(`${item}`) {
}
.width('100%')
.height(60)
.fontSize(25)
.textAlign(TextAlign.Center)
.backgroundColor('#eee')
.margin({ top: 20 })
.borderRadius(10)
}
}, (item, index) => item + `${index}`)
}
.layoutWeight(1)
}
.width('100%')
.height('100%')
// 相对定位容器
RelativeContainer() {
// 主按钮
Button() {
Text('A')
.fontSize(26)
.textAlign(TextAlign.Center)
.fontColor(Color.White)
}
.id('mainButton')
.width(60)
.height(60)
.backgroundColor('#4db8de')
.alignRules({
bottom: {
anchor: '__container__',
align: VerticalAlign.Bottom
},
right: {
anchor: '__container__',
align: HorizontalAlign.End
}
})
.onClick(() => {
// 控制是否显示多个副按钮
this.isShow = !this.isShow
})
// 动态控制显示多个副按钮
if (this.isShow) {
Button() {
Text('B')
.fontSize(26)
.textAlign(TextAlign.Center)
.fontColor(Color.White)
}
.id('ButtonB')
.width(60)
.height(60)
.backgroundColor(Color.Orange)
.alignRules({
bottom: {
anchor: 'mainButton',
align: VerticalAlign.Top
},
right: {
anchor: '__container__',
align: HorizontalAlign.End
}
})
.offset({
y: -25
})
Button() {
Text('C')
.fontSize(26)
.textAlign(TextAlign.Center)
.fontColor(Color.White)
}
.id('ButtonC')
.width(60)
.height(60)
.backgroundColor(Color.Red)
.alignRules({
bottom: {
anchor: 'mainButton',
align: VerticalAlign.Top
},
right: {
anchor: 'mainButton',
align: HorizontalAlign.Start
}
})
Button() {
Text('D')
.fontSize(26)
.textAlign(TextAlign.Center)
.fontColor(Color.White)
}
.id('ButtonD')
.width(60)
.height(60)
.backgroundColor(Color.Green)
.alignRules({
bottom: {
anchor: '__container__',
align: VerticalAlign.Bottom
},
left: {
anchor: '__container__',
align: HorizontalAlign.Start
}
})
.offset({
x: 5
})
}
}
.width(150)
.height(150)
}
.width('100%')
.height('100%')
.padding(15)
}
}
效果展示: