当前位置:   article > 正文

HarmonyOS鸿蒙开发常用4种布局详细说明_harmonyos中的布局管理器

harmonyos中的布局管理器

介绍一下鸿蒙开发常用4种布局

1、线性布局

2、层叠布局

3、网格布局

4、列表布局

1. 线性布局(Column/Row)

线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row(行)和Column(列)构建,它是其他布局的基础,其子元素在线性方向上(水平或垂直)依次排列,基本形式如下:

Column(列)

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Column({space:20}) {
  6. //一行
  7. Row() {
  8. }.width('80%').height(50).backgroundColor(Color.Green)
  9. Row() {
  10. }.width('80%').height(50).backgroundColor(Color.Orange)
  11. Row() {
  12. }.width('80%').height(50).backgroundColor(Color.Yellow)
  13. Row() {
  14. }.width('80%').height(50).backgroundColor(Color.Blue)
  15. Row() {
  16. }.width('80%').height(50).backgroundColor(Color.Red)
  17. }.width('100%').alignItems(HorizontalAlign.Center)
  18. }
  19. }

效果:


Row(行)

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Row({space:20}) {
  6. Column() {
  7. }.width('15%').height(50).backgroundColor(Color.Red);
  8. Column() {
  9. }.width('15%').height(50).backgroundColor(Color.Orange);
  10. Column() {
  11. }.width('15%').height(50).backgroundColor(Color.Red);
  12. Column() {
  13. }.width('15%').height(50).backgroundColor(Color.Blue);
  14. Column() {
  15. }.width('15%').height(50).backgroundColor(Color.Pink);
  16. }.width('100%').padding(20).backgroundColor('#ccc')
  17. }
  18. }

子元素排列与对齐

● 主轴:线性布局容器在布局方向上的轴线,Row容器主轴为横向,Column容器主轴为纵向。

● 交叉轴:垂直于主轴方向的轴线。Row容器交叉轴为纵向,Column容器交叉轴为横向。

子元素沿主轴方向的排列方式

可以通过justifyContent 属性进行控制,可选值如下:

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Column({space:20}) {
  6. //一行
  7. Row() {
  8. }.width('80%').height(50).backgroundColor(Color.Green)
  9. Row() {
  10. }.width('80%').height(50).backgroundColor(Color.Red)
  11. }.width('100%').height('100%').justifyContent(FlexAlign.Center)
  12. }
  13. }

.justifyContent(FlexAlign.Center)

.justifyContent(FlexAlign.Start)

.justifyContent(FlexAlign.End)

.justifyContent(FlexAlign.SpaceBetween)

.justifyContent(FlexAlign.SpaceAround)

.justifyContent(FlexAlign.SpaceEvenly)

子元素沿交叉轴方向的对齐方式

可以通过alignItems 属性进行控制,可选值如下:

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Column() {
  6. Row() {
  7. }.width('80%').height(50).backgroundColor(Color.Red)
  8. Row() {
  9. }.width('80%').height(50).backgroundColor(Color.Orange)
  10. Row() {
  11. }.width('80%').height(50).backgroundColor(Color.Yellow)
  12. }.width('100%').height('100%').alignItems(HorizontalAlign.Start)
  13. }
  14. }

.alignItems(HorizontalAlign.Start)

.alignItems(HorizontalAlign.Center)

.alignItems(HorizontalAlign.End)

2、 层叠布局(Stack)

Stack布局是一种常用的布局方式,它允许将子元素沿垂直于屏幕的方向堆叠在一起,类似于图层的叠加。子元素可以按照其添加顺序依次叠加在一起,后添加的子元素会覆盖之前添加的子元素,层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。

Stack容器中的子组件可通过zIndex属性设置其所在的层级,zIndex值越大,层级越高,即zIndex值大的组件会覆盖在zIndex值小的组件上方

Stack 布局通常会和 position绝对定位配合使用,设置元素左上角相对于父容器左上角偏移位置配合使用,position语法示例:.position({ x: 180, y: 130 })

  1. @Entry
  2. @Component
  3. struct StackAlign {
  4. @State alignment: Alignment = Alignment.Center;
  5. build() {
  6. Column() {
  7. Stack() {
  8. Row() {
  9. Text('1')
  10. }
  11. .width(300).height(300).backgroundColor(Color.Yellow)
  12. Row() {
  13. Text('2')
  14. }
  15. .width(150).height(150).backgroundColor(Color.Red)
  16. Row() {
  17. Text('3')
  18. }
  19. .width(75).height(75).backgroundColor(Color.Green)
  20. }
  21. }
  22. .width('100%')
  23. }
  24. }

.alignContent(Alignment.TopStart)

  1. @Entry
  2. @Component
  3. struct StackAlign {
  4. @State alignment: Alignment = Alignment.Center;
  5. build() {
  6. Column() {
  7. Stack() {
  8. Row() {
  9. Text('1')
  10. }
  11. .width(300).height(300).backgroundColor(Color.Blue)
  12. Row() {
  13. Text('2')
  14. }
  15. .width(150).height(150).backgroundColor(Color.Red)
  16. Row() {
  17. Text('3')
  18. }
  19. .width(75).height(75).backgroundColor(Color.Yellow)
  20. }
  21. .width('100%').backgroundColor('#ccc').alignContent(Alignment.TopStart) }
  22. .width('100%')
  23. }
  24. }

Fl.alignContent(Alignment.TopStart)

.alignContent(Alignment.TopEnd)

.alignContent(Alignment.Top)

.alignContent(Alignment.Start)

.alignContent(Alignment.Center)

.alignContent(Alignment.End)

.alignContent(Alignment.BottomStart)

.alignContent(Alignment.BottomEnd)

.alignContent(Alignment.Bottom)

3、 网格布局(Grid)

网格布局(Grid)是一种强大的页面排版方式,通过将页面划分为行和列组成的网格,使得子组件可以在这个二维网格中自由定位。网格布局的容器组件为Grid,子组件为GridItem,如下图所示。

1fr表示占一个“单位”

  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. Grid(){
  6. GridItem(){}.backgroundColor(Color.Red)
  7. GridItem(){}.backgroundColor(Color.Green)
  8. GridItem(){}.backgroundColor(Color.Yellow)
  9. GridItem(){}.backgroundColor(Color.Brown)
  10. GridItem(){}.backgroundColor(Color.Orange)
  11. GridItem(){}.backgroundColor(Color.Black)
  12. GridItem(){}.backgroundColor(Color.Orange)
  13. GridItem(){}.backgroundColor(Color.Gray)
  14. GridItem(){}.backgroundColor(Color.Pink)
  15. }.width('100%').height(400).rowsTemplate('1fr 2fr 1fr').columnsTemplate('1fr 1fr 1fr').rowsGap(10).columnsGap(10)
  16. }
  17. }
.rowsTemplate('1fr 2fr 1fr')

.columnsTemplate('1fr 2fr 1fr')

.rowStart(1).rowEnd(2)

.rowsGap(10).columnsGap(30)

当显示内容超出显示区域时,有滚动效果

4、 列表布局(List)

列表(List)是一种复杂的容器组件,使用列表可以轻松高效地显示结构化、可滚动的列表信息。列表布局的容器组件为List,子组件为ListItem或者ListItemGroup,其中,ListItem表示单个列表项,ListItemGroup用于列表数据的分组展示,其子组件也是ListItem,如下图所示

.listDirection(Axis.Vertical)
  1. @Entry
  2. @Component
  3. struct Index {
  4. build() {
  5. List({space:10}) {
  6. ListItem() {
  7. Text('list1')
  8. }.width('100%').backgroundColor(Color.Red)
  9. ListItemGroup() {
  10. ListItem() {
  11. Text('list2')
  12. }.width('100%')
  13. ListItem() {
  14. Text('list3')
  15. }.width('100%')
  16. }.width('100%').backgroundColor(Color.Yellow)
  17. }.width('100%').listDirection(Axis.Vertical)
  18. }
  19. }

.listDirection(Axis.Horizontal)

.alignListItem(ListItemAlign.End)

.alignListItem(ListItemAlign.Start)

.alignListItem(ListItemAlign.Center)

scrollBar属性可控制滚动条样式

  1. @Entry
  2. @Component
  3. struct Index {
  4. @State contactsGroups: object[] = [
  5. {
  6. title: 'A',
  7. contacts: [
  8. '赵云',
  9. '李白',
  10. '王思'
  11. ],
  12. },
  13. {
  14. title: 'B',
  15. contacts: [
  16. '白叶',
  17. '伯乐'
  18. ],
  19. },
  20. {
  21. title: 'C',
  22. contacts: [
  23. '王大',
  24. '张三'
  25. ],
  26. },
  27. {
  28. title: 'D',
  29. contacts: [
  30. '白龙',
  31. '小明'
  32. ],
  33. },
  34. {
  35. title: 'E',
  36. contacts: [
  37. '盖伦',
  38. '石头',
  39. '光辉'
  40. ],
  41. }
  42. ]
  43. @Builder Header(item){
  44. Text(item.title).fontSize(30).backgroundColor('#ccc').width('100%')
  45. }
  46. build() {
  47. List(){
  48. ForEach(this.contactsGroups,(item)=>{
  49. ListItemGroup({header:this.Header(item)}){
  50. ForEach(item.contacts,(user)=>{
  51. ListItem(){
  52. Text(user)
  53. }.width('100%').height(50)
  54. })
  55. }
  56. },item=>JSON.stringify(item));
  57. }.width('100%').height(300).scrollBar(BarState.On)
  58. }
  59. }

以上就是鸿蒙开发相关布局

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书方式请点击鸿蒙生态应用开发白皮书V2.0PDF

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《做鸿蒙应用开发到底学习些啥?

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:鸿蒙 (Harmony OS)开发学习手册

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/520557
推荐阅读
相关标签
  

闽ICP备14008679号