Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Docs
提交
50d94e45
D
Docs
项目概览
OpenHarmony
/
Docs
大约 2 年 前同步成功
通知
161
Star
293
Fork
28
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Docs
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
未验证
提交
50d94e45
编写于
10月 18, 2022
作者:
O
openharmony_ci
提交者:
Gitee
10月 18, 2022
浏览文件
操作
浏览文件
下载
差异文件
!10318 【ace_engine_standard部件】支持瀑布流组件布局能力
Merge pull request !10318 from limeng/waterflow
上级
805e93ff
9c5050d8
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
297 addition
and
0 deletion
+297
-0
zh-cn/application-dev/reference/arkui-ts/Readme-CN.md
zh-cn/application-dev/reference/arkui-ts/Readme-CN.md
+2
-0
zh-cn/application-dev/reference/arkui-ts/figures/waterflow.gif
.../application-dev/reference/arkui-ts/figures/waterflow.gif
+0
-0
zh-cn/application-dev/reference/arkui-ts/ts-container-flowitem.md
...plication-dev/reference/arkui-ts/ts-container-flowitem.md
+31
-0
zh-cn/application-dev/reference/arkui-ts/ts-container-waterflow.md
...lication-dev/reference/arkui-ts/ts-container-waterflow.md
+264
-0
未找到文件。
zh-cn/application-dev/reference/arkui-ts/Readme-CN.md
浏览文件 @
50d94e45
...
...
@@ -98,6 +98,7 @@
-
[
ColumnSplit
](
ts-container-columnsplit.md
)
-
[
Counter
](
ts-container-counter.md
)
-
[
Flex
](
ts-container-flex.md
)
-
[
FlowItem
](
ts-container-flowitem.md
)
-
[
GridContainer
](
ts-container-gridcontainer.md
)
-
[
GridCol
](
ts-container-gridcol.md
)
-
[
GridRow
](
ts-container-gridrow.md
)
...
...
@@ -118,6 +119,7 @@
-
[
Swiper
](
ts-container-swiper.md
)
-
[
Tabs
](
ts-container-tabs.md
)
-
[
TabContent
](
ts-container-tabcontent.md
)
-
[
WaterFlow
](
ts-container-waterflow.md
)
-
媒体组件
-
[
Video
](
ts-media-components-video.md
)
-
绘制组件
...
...
zh-cn/application-dev/reference/arkui-ts/figures/waterflow.gif
0 → 100644
浏览文件 @
50d94e45
8.1 MB
zh-cn/application-dev/reference/arkui-ts/ts-container-flowitem.md
0 → 100644
浏览文件 @
50d94e45
# FlowItem
[
瀑布流组件
](
ts-container-waterflow.md
)
的子组件,用来展示瀑布流具体item。
> **说明:**
>
> 该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
## 子组件
支持单个子组件。
## 接口
FlowItem()
使用该接口来创建瀑布流子组件。
## 属性
无
## 示例
详见
[
瀑布流组件示例
](
ts-container-waterflow.md#示例
)
。
\ No newline at end of file
zh-cn/application-dev/reference/arkui-ts/ts-container-waterflow.md
0 → 100644
浏览文件 @
50d94e45
# WaterFlow
瀑布流容器,由“行”和“列”分割的单元格所组成,通过容器自身的排列规则,将不同大小的“项目”自上而下,如瀑布般紧密布局。
> **说明:**
>
> 该组件从API Version 9 开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。
## 子组件
包含
[
FlowItem
](
ts-container-flowitem.md
)
子组件。
## 接口
WaterFlow(options?: {footer?: CustomBuilder, scroller?: Scroller})
**参数:**
| 参数名 | 参数类型 | 必填 | 参数描述 |
| ---------- | ----------------------------------------------- | ------ | -------------------------------------------- |
| footer |
[
CustomBuilder
](
ts-types.md#custombuilder8
)
| 否 | 设置WaterFlow尾部组件。 |
| scroller |
[
Scroller
](
ts-container-scroll.md#scroller
)
| 否 | 可滚动组件的控制器,与可滚动组件绑定。 |
## 属性
除支持
[
通用属性
](
ts-universal-attributes-size.md
)
外,还支持以下属性:
| 名称 | 参数类型 | 描述 |
| -------- | -------- | -------- |
| columnsTemplate | string | 设置当前瀑布流组件布局列的数量,不设置时默认1列。
<br/>
例如, '1fr 1fr 2fr' 是将父组件分3列,将父组件允许的宽分为4等份,第一列占1份,第二列占1份,第三列占2份。并支持
[
auto-fill
](
#auto-fill说明
)
。
<br>
默认值:'1fr' |
| rowsTemplate | string | 设置当前瀑布流组件布局行的数量,不设置时默认1行。
<br/>
例如, '1fr 1fr 2fr'是将父组件分三行,将父组件允许的高分为4等份,第一行占1份,第二行占一份,第三行占2份。并支持
[
auto-fill
](
#auto-fill说明
)
。
<br/>
默认值:'1fr' |
| itemConstraintSize |
[
ConstraintSizeOptions
](
ts-types.md#constraintsizeoptions
)
| 设置约束尺寸,子组件布局时,进行尺寸范围限制。 |
| columnsGap | Length |设置列与列的间距。
<br>
默认值:0|
| rowsGap | Length |设置行与行的间距。
<br>
默认值:0|
| layoutDirection |
[
FlexDirection
](
ts-appendix-enums.md#flexdirection
)
|设置布局的主轴方向。|
## 事件
除支持
[
通用事件
](
ts-universal-events-click.md
)
外,还支持以下事件:
| 名称 | 功能描述 |
| -------- | -------- |
| onReachStart(event: () => void) | 瀑布流组件到达起始位置时触发。 |
| onReachEnd(event: () => void) | 瀑布流组件到底末尾位置时触发。 |
## auto-fill说明
WaterFlow的columnsTemplate、rowsTemplate属性的auto-fill仅支持以下格式:
```
css
repeat
(
auto-fill
,
track-size
)
```
其中repeat、auto-fill为关键字。track-size为行高或者列宽,支持的单位包括px、vp、%或有效数字,track-size至少包括一个有效行高或者列宽。
## 示例
```
ts
// WaterFlowDataSource.ets
// 实现IDataSource接口的对象,用于瀑布流组件加载数据
export
class
WaterFlowDataSource
implements
IDataSource
{
private
dataArray
:
number
[]
=
[]
private
listeners
:
DataChangeListener
[]
=
[]
constructor
()
{
for
(
let
i
=
0
;
i
<=
100
;
i
++
)
{
this
.
dataArray
.
push
(
i
);
}
}
// 获取索引对应的数据
public
getData
(
index
:
number
):
any
{
return
this
.
dataArray
[
index
]
}
// 通知控制器数据重新加载
notifyDataReload
():
void
{
this
.
listeners
.
forEach
(
listener
=>
{
listener
.
onDataReloaded
()
})
}
// 通知控制器数据增加
notifyDataAdd
(
index
:
number
):
void
{
this
.
listeners
.
forEach
(
listener
=>
{
listener
.
onDataAdded
(
index
)
})
}
// 通知控制器数据变化
notifyDataChange
(
index
:
number
):
void
{
this
.
listeners
.
forEach
(
listener
=>
{
listener
.
onDataChanged
(
index
)
})
}
// 通知控制器数据删除
notifyDataDelete
(
index
:
number
):
void
{
this
.
listeners
.
forEach
(
listener
=>
{
listener
.
onDataDeleted
(
index
)
})
}
// 通知控制器数据位置变化
notifyDataMove
(
from
:
number
,
to
:
number
):
void
{
this
.
listeners
.
forEach
(
listener
=>
{
listener
.
onDataMoved
(
from
,
to
)
})
}
// 获取数据总数
public
totalCount
():
number
{
return
this
.
dataArray
.
length
}
// 注册改变数据的控制器
registerDataChangeListener
(
listener
:
DataChangeListener
):
void
{
if
(
this
.
listeners
.
indexOf
(
listener
)
<
0
)
{
this
.
listeners
.
push
(
listener
)
}
}
// 注销改变数据的控制器
unregisterDataChangeListener
(
listener
:
DataChangeListener
):
void
{
const
pos
=
this
.
listeners
.
indexOf
(
listener
);
if
(
pos
>=
0
)
{
this
.
listeners
.
splice
(
pos
,
1
)
}
}
// 增加数据
public
Add1stItem
():
void
{
this
.
dataArray
.
splice
(
0
,
0
,
this
.
dataArray
.
length
)
this
.
notifyDataAdd
(
0
)
}
// 在数据尾部增加一个元素
public
AddLastItem
():
void
{
this
.
dataArray
.
splice
(
this
.
dataArray
.
length
,
0
,
this
.
dataArray
.
length
)
this
.
notifyDataAdd
(
this
.
dataArray
.
length
-
1
)
}
// 在指定索引位置增加一个元素
public
AddItem
(
index
:
number
):
void
{
this
.
dataArray
.
splice
(
index
,
0
,
this
.
dataArray
.
length
)
this
.
notifyDataAdd
(
index
)
}
// 删除第一个元素
public
Delete1stItem
():
void
{
this
.
dataArray
.
splice
(
0
,
1
)
this
.
notifyDataDelete
(
0
)
}
// 删除第二个元素
public
Delete2ndItem
():
void
{
this
.
dataArray
.
splice
(
1
,
1
)
this
.
notifyDataDelete
(
1
)
}
// 删除最后一个元素
public
DeleteLastItem
():
void
{
this
.
dataArray
.
splice
(
-
1
,
1
)
this
.
notifyDataDelete
(
this
.
dataArray
.
length
)
}
// 重新加载数据
public
Reload
():
void
{
this
.
dataArray
.
splice
(
1
,
1
);
this
.
dataArray
.
splice
(
3
,
2
);
this
.
notifyDataReload
();
}
}
```
```
ts
// WaterflowDemo.ets
import
{
WaterFlowDataSource
}
from
'
./WaterFlowDataSource
'
@
Entry
@
Component
struct
WaterflowDemo
{
@
State
minSize
:
number
=
50
@
State
maxSize
:
number
=
100
@
State
fontSize
:
number
=
24
@
State
colors
:
number
[]
=
[
0xFFC0CB
,
0xDA70D6
,
0x6B8E23
,
0x6A5ACD
,
0x00FFFF
,
0x00FF7F
]
scroller
:
Scroller
=
new
Scroller
();
datasource
:
WaterFlowDataSource
=
new
WaterFlowDataSource
();
// 计算flow item宽/高
getSize
()
{
let
ret
=
Math
.
floor
(
Math
.
random
()
*
this
.
maxSize
)
return
(
ret
>
this
.
minSize
?
ret
:
this
.
minSize
)
}
@
Builder
itemFoot
()
{
Column
()
{
Text
(
`Footer`
)
.
fontSize
(
10
)
.
backgroundColor
(
Color
.
Red
)
.
width
(
50
)
.
height
(
50
)
.
align
(
Alignment
.
Center
)
.
margin
({
top
:
2
})
}
}
build
()
{
Column
({
space
:
2
})
{
WaterFlow
({
footer
:
this
.
itemFoot
,
scroller
:
this
.
scroller
})
{
LazyForEach
(
this
.
datasource
,
(
item
:
number
)
=>
{
FlowItem
()
{
Column
()
{
Text
(
"
N
"
+
item
).
fontSize
(
12
).
height
(
'
16
'
)
Image
(
'
res/waterFlowTest(
'
+
item
%
5
+
'
).jpg
'
)
.
objectFit
(
ImageFit
.
Fill
)
}
}
.
width
(
this
.
getSize
())
.
height
(
this
.
getSize
())
.
backgroundColor
(
this
.
colors
[
item
%
5
])
},
item
=>
item
)
}
.
columnsTemplate
(
"
1fr 1fr 1fr 1fr
"
)
.
itemConstraintSize
({
minWidth
:
0
,
maxWidth
:
'
100%
'
,
minHeight
:
0
,
maxHeight
:
'
100%
'
})
.
columnsGap
(
10
)
.
rowsGap
(
5
)
.
onReachStart
(()
=>
{
console
.
info
(
"
onReachStart
"
)
})
.
onReachEnd
(()
=>
{
console
.
info
(
"
onReachEnd
"
)
})
.
backgroundColor
(
0xFAEEE0
)
.
width
(
'
100%
'
)
.
height
(
'
80%
'
)
.
layoutDirection
(
FlexDirection
.
Column
)
}
}
}
```

\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录