可以通过组合ListItem
的边距和Stack
布局实现类似分组圆角效果,这里提供一个实现方案:
@Builder
private getGroupItem(index: number) {
Stack() {
// 背景容器(实现圆角)
Column()
.width('100%')
.height('100%')
.backgroundColor(Color.White)
.borderRadius(15)
// 实际内容
Text(`Item ${index}`)
.fontSize(16)
.margin({ left: 20 })
}
.margin({
top: index === 0 ? 10 : 0, // 首项上边距
bottom: index === 2 ? 10 : 0, // 尾项下边距(示例3项为一组)
left: 16,
right: 16
})
}
@Builder
private getListView() {
List() {
LazyForEach(this.listData, (item: number) => {
ListItem() {
this.getGroupItem(item)
}
// 取消默认间隔
.padding(0)
.borderRadius(0)
})
}
// 隐藏列表默认分割线
.divider({ strokeWidth: 0 })
}
实现原理:
- 使用
Stack
布局叠加背景和内容 - 通过
Column
作为背景容器实现圆角 - 控制首尾项的上下边距形成完整圆角
- 消除ListItem默认样式干扰
调整建议:
- 修改
.borderRadius()
数值控制圆角大小 - 调整
margin
参数控制组间距 - 修改
Column
的背景色适应主题 - 通过条件判断动态设置首尾项(示例中固定index判断需替换为实际分组逻辑)
提示:如果列表需要滚动,建议给List容器设置固定高度避免布局异常。对于动态分组场景,需要结合数据源结构处理首尾项的判定条件。
解决方案如下: