效果展示
知识点
层叠布局
上一篇文章已经介绍了,这篇文章中不再赘述,如果想了解的话可以去看上一篇文章,链接如下:
http://t.csdnimg.cn/CnBZMhttp://t.csdnimg.cn/CnBZM
弹性布局
作用:提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。
容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸。
主轴为水平方向的Flex容器示意图
主轴
Flex组件布局方向的轴线,子元素默认沿着主轴排列。主轴开始的位置称为主轴起始点,结束位置称为主轴结束点。
交叉轴
垂直于主轴方向的轴线。交叉轴开始的位置称为交叉轴起始点,结束位置称为交叉轴结束点。
布局方向
布局换行
弹性布局分为单行布局和多行布局。默认情况下,Flex容器中的子元素都排在一条线(又称“轴线”)上。wrap属性控制当子元素主轴尺寸之和大于容器主轴尺寸时,Flex是单行布局还是多行布局。在多行布局时,通过交叉轴方向,确认新行排列方向。
主轴对齐方式
通过justifyContent参数设置子元素在主轴方向的对齐方式。
交叉轴对齐方式
容器和子元素都可以设置交叉轴对齐方式,且子元素设置的对齐方式优先级较高。
页面滚动Scroll
作用:可滚动的容器组件,当子组件的布局尺寸超过父组件的尺寸时,内容可以滚动。
属性
名称 | 参数类型 | 描述 |
---|---|---|
scrollable | ScrollDirection | 设置滚动方向 默认值:ScrollDirection.Vertical |
scrollBar | BarState | 设置滚动条状态 默认值:BarState.Auto 说明:如果容器组件无法滚动,则滚动条不显示。如果容器组件的子组件大小为无穷大,则滚动条不支持拖动和伴随滚动。 |
scrollBarColor | string number Color | 设置滚动条的颜色 |
scrollBarWidth | string number | 设置滚动条的宽度,不支持百分比设置 默认值:4 单位:vp 说明:如果滚动条的宽度超过其高度,则滚动条的宽度会变为默认值 |
scrollSnap10+ | ScrollSnapOptions | 设置Scroll组件的限位滚动模式 |
edgeEffect | EdgeEffect | 设置滑动效果 默认值:EdgeEffect.None |
enableScrollInteraction10+ | boolean | 设置是否支持滚动手势,当设置为false时,无法通过手指或鼠标滚动,但不影响控制器的滚动接口 默认值:true |
nestedScroll10+ | NestedScrollOptions | 嵌套滚动选项,设置向前向后两个方向上的嵌套滚动模式,实现与父组件的滚动联动 |
firction10+ | number Resource | 设置摩擦系数,手动划动滚动区域时生效,只对惯性运动过程中的链式效果有间接影响 默认值:非可穿戴设备为0.6,可穿戴设备为0.9 说明:设置为小于0的值时,按默认值处理 |
ScrollDirection枚举说明
名称 | 描述 |
---|---|
Horizontal | 仅支持水平方向滚动 |
Vertical | 仅支持竖直方向滚动 |
None | 不可滚动 |
Free(deprecated) | 支持竖直或水平方向滚动,从API version9开始废弃 |
代码展示
@Entry @Component struct Index { @State message: string = 'Hello World'; build() { Stack({ alignContent: Alignment.Bottom }) { // 内容区域 Stack({ alignContent: Alignment.Top }) { // 搜索区域 Row() { // 地区和天气 Column() { Row() { Text("北京") .fontColor("#fff") Image($r("app.media.zfb_head_down")) .margin({ top: 2, left: 5 }) .width(10) .fillColor("#fff") }.alignItems(VerticalAlign.Top) Text("晴 2℃") .fontSize(12) .fontColor("#fff") }.alignItems(HorizontalAlign.Start) // 搜索框 Row() { Image($r("app.media.zfb_head_search")) .width(20) .fillColor("#666") Text("北京交通一卡通") .margin({ left: 5 }) .layoutWeight(1) Text("|") .fontColor("#ccc") Text("搜索") .width(55) .textAlign(TextAlign.Center) .fontWeight(700) .fontColor("#6792E1") } .height(40) .padding({ left: 10 }) .margin({ left: 15, right: 15 }) .layoutWeight(1) .backgroundColor("#fff") .borderRadius(10) // 更多 Image($r("app.media.zfb_head_plus")) .width(30) .fillColor("#fff") } .padding(10) .height(60) .backgroundColor("#4B73EC") .zIndex(66) // 滚动区域 Scroll() { Column() { // 扫一扫区域 Row() { Column() { Image($r("app.media.zfb_top_scan")) .width(36) .fillColor("#fff") Text("扫一扫") .fontColor("#fff") } Column() { Image($r("app.media.zfb_top_pay")) .width(36) .fillColor("#fff") Text("收付款") .fontColor("#fff") } Column() { Image($r("app.media.zfb_top_travel")) .width(36) .fillColor("#fff") Text("出行") .fontColor("#fff") } Column() { Image($r("app.media.zfb_top_card")) .width(36) .fillColor("#fff") Text("卡包") .fontColor("#fff") } } .padding({ top: 5, bottom: 15 }) .width("100%") .justifyContent(FlexAlign.SpaceAround) .backgroundColor("#4B73EC") // 主体内容区域 Column() { // 快捷菜单区域 Flex({ wrap: FlexWrap.Wrap, }) { Column() { Image($r("app.media.zfb_nav1")) .width(28) Text("滴滴出行") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav2")) .width(28) Text("生活缴费") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav3")) .width(28) Text("股票") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav4")) .width(28) Text("蚂蚁森林") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav5")) .width(28) Text("手机充值") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav6")) .width(28) Text("余额宝") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav7")) .width(28) Text("花呗") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav8")) .width(28) Text("飞猪旅行") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav9")) .width(28) Text("淘票票") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav10")) .width(28) Text("饿了么") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav11")) .width(28) Text("读书听书") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav12")) .width(28) Text("基金") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav13")) .width(28) Text("直播推广") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav14")) .width(28) Text("医疗健康") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") Column() { Image($r("app.media.zfb_nav15_more")) .width(28) Text("更多") .margin({ top: 8, bottom: 10 }) .fontSize("13") .fontColor("#666") } .width("20%") } .padding(10) Row() { Image($r("app.media.zfb_pro_pic1")) .width("30%") Image($r("app.media.zfb_pro_pic2")) .width("30%") Image($r("app.media.zfb_pro_pic3")) .width("30%") } .width("100%") .justifyContent(FlexAlign.SpaceAround) Image($r("app.media.zfb_pro_list1")) .width("97%") .margin({ top: 10, bottom: 10 }) Image($r("app.media.zfb_pro_list2")) .width("97%") .margin({ bottom: 10 }) } .borderRadius({ topLeft: 20, topRight: 20 }) .width("100%") .backgroundColor("#f6f6f6") } } .scrollable(ScrollDirection.Vertical) .width("100%") .padding({ top: 60, bottom: 60 }) } .height("100%") // tabBar区域 Row() { Column() { Image($r("app.media.zfb_tab_home")) .width(35) } .layoutWeight(1) Column({ space: 4 }) { Image($r("app.media.zfb_tab_money")) .width(28) Text("理财") .fontSize(14) } .layoutWeight(1) Column({ space: 4 }) { Image($r("app.media.zfb_tab_life")) .width(28) Text("生活") .fontSize(14) } .layoutWeight(1) Column({ space: 4 }) { Image($r("app.media.zfb_tab_chat")) .width(28) Text("消息") .fontSize(14) } .layoutWeight(1) Column({ space: 4 }) { Image($r("app.media.zfb_tab_me")) .width(28) Text("我的") .fontSize(14) } .layoutWeight(1) } .width("100%") .height(60) .backgroundColor("#fff") } .height("100%") .width("100%") .backgroundColor("#4B73EC") } }