鸿蒙Next开发日记 Day12 - Grid组件使用体验

Grid
网格容器,由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。
可以用来密集的展示规律性信息。
本人把它用在了展示影片列表的功能上。
来看看,我这里是如何实现的
Refresh({ refreshing: $$this.refreshing }) {
Grid(this.scroller) {
ForEach(this.mItems, (item: Item, index) => {
GridItem() {
this.ItemView(item)
}
})
}
// .columnsTemplate('1fr 1fr 1fr')
// .rowsTemplate('1fr 1fr 1fr 1fr 1fr 1fr')
.columnsGap(5)
.rowsGap(5)
.columnsTemplate('repeat(auto-fit, 90)')
.width('100%')
.backgroundColor($r('app.color.background_main'))
.padding({
top: 0,
bottom: 50,
right: 5,
left: 5
})
.scrollBar(BarState.Off)
.onScrollStop(() => {
if (this.scroller?.isAtEnd()) {
this.loadNextPage()
}
})
}
.onRefreshing(() => {
this.mTotalCount = 9999
this.mItemStartIndex = 0
this.init()
})
.refreshOffset(64)
.pullToRefresh(true)这里的关键点是使用Grid组件与GridItem组件。
Grid是表格的整体组件,GridItem是表格项组件。
首先,在Grid组件上面,数量设置很重要。
可以设置表格展示的行列数量,正常来说为了多终端的适配,不建议这样配置。
.columnsTemplate('1fr 1fr 1fr')
.rowsTemplate('1fr 1fr 1fr 1fr 1fr 1fr')另一种方式可以让系统自动来适配。
这里使用columnsTemplate
看字面意思,就是列模版了。
官方的说明如下
设置当前网格布局列的数量、固定列宽或最小列宽值,不设置时默认1列。
例如, '1fr 1fr 2fr' 是将父组件分3列,将父组件允许的宽分为4等份,第一列占1份,第二列占1份,第三列占2份。
columnsTemplate('repeat(auto-fit, track-size)')是设置最小列宽值为track-size,自动计算列数和实际列宽。
columnsTemplate('repeat(auto-fill, track-size)')是设置固定列宽值为track-size,自动计算列数。
columnsTemplate('repeat(auto-stretch, track-size)')是设置固定列宽值为track-size,使用columnsGap为最小列间距,自动计算列数和实际列间距。
其中repeat、auto-fit、auto-fill、auto-stretch为关键字。track-size为列宽,支持的单位包括px、vp、%或有效数字,默认单位为vp,track-size至少包括一个有效列宽。
auto-stretch模式只支持track-size为一个有效列宽值,并且track-size只支持px、vp和有效数字,不支持%。
代码里面我们使用了repeat(auto-fit, 90),是每列可以自动计算实际列宽。
设置Grid的其他样式
通过columnsGap(5)与rowsGap(5)设置内部行列的间距。
scrollBar来控制滚动条的显示。
GridItem
先对来说配置项就少了很多了。内部放入自己每一项要是展示的样式即可。
下拉刷新与上划加载
下来刷新这里在外层包裹Refresh来实现。
上划加载,通过监听Grid组件的onScrollStop事件来实现,当触发此事件时,this.scroller?.isAtEnd()已经到底,则进行加载下一页的操作。
<< 上一篇
网友留言(2 条)