HarmonyOS鸿蒙Next中瀑布流(WaterFlow)如何设置某一行横跨两列?
HarmonyOS鸿蒙Next中瀑布流(WaterFlow)如何设置某一行横跨两列?
求助各位,API 9 下 WaterFlow 是否可以通过 auto-fill 或其他方式实现以下效果?
更多关于HarmonyOS鸿蒙Next中瀑布流(WaterFlow)如何设置某一行横跨两列?的实战教程也可以访问 https://www.itying.com/category-93-b0.html
外层Scroll,然后栅格布局,头部四个均分,第五个占全屏。最后一个子栅格使用WaterFlow。整体可滑动。API 11。
更多关于HarmonyOS鸿蒙Next中瀑布流(WaterFlow)如何设置某一行横跨两列?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
@Entry @Component struct Page53 { @State listPosition: number = 0; // 0代表滚动到List顶部,1代表中间值,2代表滚动到List底部。 private arr: number[] = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] private scrollerForScroll: Scroller = new Scroller() private scrollerForList: Scroller = new Scroller()
build() { Flex() { Scroll(this.scrollerForScroll) { Column() { Text(“Scroll Area”) .width(“100%”) .height(“40%”) .backgroundColor(0X330000FF) .fontSize(16) .textAlign(TextAlign.Center) .onClick(() => { this.scrollerForList.scrollToIndex(5) })
WaterFlow({ scroller: this.scrollerForList }) {
ForEach(this.arr, (item) => {
FlowItem() {
Text("ListItem" + item)
.width("100%")
.height("100%")
.borderRadius(15)
.fontSize(16)
.textAlign(TextAlign.Center)
.backgroundColor(Color.White)
}.width("100%").height(100)
}, item => item)
}
.enabled(false)
.columnsGap(40)
.rowsGap(10)
.columnsTemplate("1fr 1fr")
.width("100%")
.height("100%")
.onReachStart(() => {
this.listPosition = 0
})
.onReachEnd(() => {
this.listPosition = 2
})
Text("Scroll Area")
.width("100%")
.height("40%")
.backgroundColor(0X330000FF)
.fontSize(16)
.textAlign(TextAlign.Center)
}
}
.width("100%").height("100%")
}.width('100%').height('100%').backgroundColor(0xDCDCDC).padding(20)
} }
支持嵌套,.enabled(false)
这个把WaterFlow的滑动取消,要不然跟Scroll冲突了。
跑了下,这种方式有用,感谢大佬!
好像也不太对,滑动取消后应该如何确定 WaterFlow 的组件高度呢?比如说 this.arr
有 10000 个 element 的时候,WaterFlow 的高度依然会固定为 ‘100%’,且不支持滑动,那么未显示出来的元素不就是永远显示不出来了吗?
我查询demo,我发现其实你这种情况很好做到,我发现,每个item都可以单独设置宽度跟高度。
这个就是根据数组里面的计算出你想实现的宽高。
我看到这个 Demo 了,我感觉这个仅限于列数固定的瀑布流布局,设置 columnsTemplate 属性为 ‘1fr 1fr’ 后列数固定是两列,貌似无法实现我的这种有的一行是一列,有的是四列,有的是两列的情况?
是的,一开始是把 WaterFlow 做成最下面的控件,整个页面用一个 Scroll 来支持上面的组件滚动,但是 API 9 下不支持滚动组件的嵌套,所以才想着把整个界面都做成 WaterFlow,又看到 WaterFlow 支持 auto-fill,隐约觉得可行,所以来问问论坛上的大佬有没有什么好的解决方案。
这个不能通过WaterFlow实现,可以通过Gird布局里面rowsTemplate这个属性来设置多行数据。
Grid 好像要求我必须提前预设哪一项会横跨多行/多列?6-11 是一个瀑布流列表,Grid 可以满足需求吗?
我重新看了一下,WaterFlow支持auto-fill ,可以做到。Grid 只能写死rowsTemplate,
我是看到支持 auto-fill,但是不知道这个 auto-fill 要怎么写 track-size,官方文档和 Demo 里均未对这一关键字进行更进一步的详细说明,可否有其他文档推荐?
在HarmonyOS鸿蒙Next中,可以通过自定义WaterFlowItemController
来实现瀑布流中某一行横跨两列的效果。具体步骤如下:
- 创建自定义ItemController:继承
WaterFlowItemController
,重写onMeasure
和onLayout
方法,调整Item的宽度和布局。 - 设置跨列属性:在
onMeasure
中,将Item的宽度设置为两列的宽度,并调整高度以适应内容。 - 应用自定义Controller:在
WaterFlow
中使用自定义的ItemController,确保跨列效果生效。
通过这种方式,可以灵活控制瀑布流中Item的布局,实现跨列效果。