容器组件:栅格布局,侧边栏容器(HarmonyOS学习第四课【4.5】)

栅格布局

栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题,保证不同设备上各个模块的布局一致性。

栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。

说明

该组件从API Version 9开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。

子组件

可以包含GridCol子组件。

接口

GridRow(option?: {columns?: number | GridRowColumnOption, gutter?: Length | GutterOption, breakpoints?: BreakPoints, direction?: GridRowDirection})

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

类型

必填

说明

gutter

Length | GutterOption

栅格布局间距,x代表水平方向。

columns

number | GridRowColumnOption

设置布局列数。

breakpoints

BreakPoints

设置断点值的断点数列以及基于窗口或容器尺寸的相应参照。

direction

GridRowDirection

栅格布局排列方向。

GutterOption

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数名

参数类型

必填

参数描述

x

Length | GridRowSizeOption

水平gutter option。

y

Length | GridRowSizeOption

竖直gutter option。

GridRowColumnOption

栅格在不同宽度设备类型下,栅格列数。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数名

参数类型

必填

参数描述

xs

number

最小宽度类型设备。

sm

number

小宽度类型设备。

md

number

中等宽度类型设备。

lg

number

大宽度类型设备。

xl

number

特大宽度类型设备。

xxl

number

超大宽度类型设备。

GridRowSizeOption

栅格在不同宽度设备类型下,gutter的大小。

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数名

参数类型

必填

参数描述

xs

Length

最小宽度类型设备。

sm

Length

小宽度类型设备。

md

Length

中等宽度类型设备。

lg

Length

大宽度类型设备。

xl

Length

特大宽度类型设备。

xxl

Length

超大宽度类型设备。

BreakPoints

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数名

参数类型

必填

参数描述

value

Array<string>

设置断点位置的单调递增数组。

默认值:["320vp", "520vp", "840vp"]

reference

BreakpointsReference

断点切换参照物。

  // 启用xs、sm、md共3个断点
  breakpoints: {value: ["100vp", "200vp"]}
  // 启用xs、sm、md、lg共4个断点,断点范围值必须单调递增
  breakpoints: {value: ["320vp", "520vp", "840vp"]}
  // 启用xs、sm、md、lg、xl共5个断点,断点范围数量不可超过断点可取值数量-1
  breakpoints: {value: ["320vp", "520vp", "840vp", "1080vp"]}

 

BreakpointsReference枚举类型

从API version 9开始,该接口支持在ArkTS卡片中使用。

枚举名

描述

WindowSize

以窗口为参照。

ComponentSize

以容器为参照。

GridRowDirection枚举类型

从API version 9开始,该接口支持在ArkTS卡片中使用。

枚举名

描述

Row

栅格元素按照行方向排列。

RowReverse

栅格元素按照逆序行方向排列。

栅格最多支持xs、sm、md、lg、xl、xxl六个断点,且名称不可修改。假设传入的数组是[n0, n1, n2, n3, n4],各个断点取值如下:

断点

取值范围

xs

[0, n0)

sm

[n0, n1)

md

[n1, n2)

lg

[n2, n3)

xl

[n3, n4)

xxl

[n4, INF)

说明:

  • 栅格元素仅支持Row/RowReverse排列,不支持column/ColumnReverse方向排列。
  • 栅格子组件仅能通过span、offset计算子组件位置与大小。多个子组件span超过规定列数时自动换行。
  • 单个元素span大小超过最大列数时后台默认span为最大column数。
  • 新一行的Offset加上子组件的span超过总列数时,将下一个子组件在新的一行放置。
  • 例:Item1: GridCol({ span: 6}), Item2: GridCol({ span: 8, offset:11})

1

2

3

4

5

6

7

8

9

10

11

12

-

-

-

-

-

-

-

-

-

-

-

              

        

属性

支持通用属性。

事件

onBreakpointChange

onBreakpointChange(callback: (breakpoints: string) => void)

从API version 9开始,该接口支持在ArkTS卡片中使用。

参数:

参数名

参数类型

必填

说明

breakpoints

string

断点发生变化时触发回调

取值为"xs"、"sm"、"md"、"lg"、"xl"、"xxl"。

官方示例 

// xxx.ets
@Entry
@Component
struct GridRowExample {
  @State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown]
  @State currentBp: string = 'unknown'

  build() {
    Column() {
      GridRow({
        columns: 5,
        gutter: { x: 5, y: 10 },
        breakpoints: { value: ["400vp", "600vp", "800vp"],
          reference: BreakpointsReference.WindowSize },
        direction: GridRowDirection.Row
      }) {
        ForEach(this.bgColors, (color) => {
          GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 } }) {
            Row().width("100%").height("20vp")
          }.borderColor(color).borderWidth(2)
        })
      }.width("100%").height("100%")
      .onBreakpointChange((breakpoint) => {
        this.currentBp = breakpoint
      })
    }.width('80%').margin({ left: 10, top: 5, bottom: 5 }).height(200)
    .border({ color: '#880606', width: 2 })
  }
}

GridContainer定义介绍

interface GridContainerInterface {
  (value?: GridContainerOptions): GridContainerAttribute;
}

declare interface GridContainerOptions {
  columns?: number | "auto";
  sizeType?: SizeType;
  gutter?: number | string;
  margin?: number | string;
}
  • value:设置布局的可选参数, GridContainerOptions 说明如下:

    • columns:设置当前布局总列数,默认为 auto
    • sizeType:设置选用设备宽度类型, SizeType 参数说明如下:
      • XS:最小宽度类型设备。
      • SM:小宽度类型设备。
      • MD:中等宽度类型设备。
      • LG:大宽度类型设备。
      • Auto(默认值):根据设备类型进行选择。
    • gutter:设置栅格布局列间距。
    • margin:设置栅格布局两侧间距。

    简单样例如下所示:

@Entry @Component struct ComponentTest {
  
  @State sizeType: SizeType = SizeType.XS // 默认采用最小宽度设备类型

  build() {
    Column() {
      GridContainer({
        columns: 12,                      // 设置格栅布局为12列
        sizeType: this.sizeType,          // 设置格栅布局类型
        gutter: 10,                       // 设置格栅布局列间距,该版本还有bug
        margin: 20                        // 设计格栅布局两侧间距
      }) {
        Row() {
          Text('1')
            .useSizeType({
              xs: { span: 6, offset: 0 }, // Text1在xs设备上占用6列
              sm: { span: 2, offset: 0 }, // Text1在sm设备上占用2列
              md: { span: 2, offset: 0 }, // Text1在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text1在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x4682B4)
            .textAlign(TextAlign.Center)
          Text('2')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text2在xs设备上占用2列
              sm: { span: 6, offset: 0 }, // Text2在sm设备上占用6列
              md: { span: 2, offset: 0 }, // Text2在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text2在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x00BFFF)
            .textAlign(TextAlign.Center)
          Text('3')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text3在xs设备上占用2列
              sm: { span: 2, offset: 0 }, // Text3在sm设备上占用2列
              md: { span: 6, offset: 0 }, // Text3在md设备上占用6列
              lg: { span: 3, offset: 0 }  // Text3在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x4682B4)
            .textAlign(TextAlign.Center)
          Text('4')
            .useSizeType({
              xs: { span: 2, offset: 0 }, // Text4在xs设备上占用2列
              sm: { span: 2, offset: 0 }, // Text4在sm设备上占用2列
              md: { span: 2, offset: 0 }, // Text4在md设备上占用2列
              lg: { span: 3, offset: 0 }  // Text4在lg设备上占用3列
            })
            .fontSize(20)
            .height(50)
            .backgroundColor(0x00BFFF)
            .textAlign(TextAlign.Center)
        }
      }
      .backgroundColor(Color.Pink)
      .width('90%')
      .margin({top: 10})

      Row({space: 10}) {
        Button('XS')
          .onClick(() => {
            this.sizeType = SizeType.XS
          }).backgroundColor(0x317aff)
        Button('SM')
          .onClick(() => {
            this.sizeType = SizeType.SM
          }).backgroundColor(0x317aff)
        Button('MD')
          .onClick(() => {
            this.sizeType = SizeType.MD
          }).backgroundColor(0x317aff)
        Button('LG')
          .onClick(() => {
            this.sizeType = SizeType.LG
          }).backgroundColor(0x317aff)
      }
      .margin({top: 10})
    }.width('100%')
  }
}

侧边栏容器(SideBarContainer)

SideBarContainer 表示侧边栏容器,它可以添加两个子组件,第一个子组件表示侧边栏,第二个子组件表示内容区,本节笔者简单介绍一下 SideBarContainer 的简单使用。

SideBarContainer定义介绍

interface SideBarContainerInterface {
  (type?: SideBarContainerType): SideBarContainerAttribute;
}
  • type:设置侧边栏的显示类型, SideBarContainerType 定义了一下 2 中类型:
    • Embed:侧边栏嵌入到组件内,侧边栏和内容区并列显示。
    • Overlay:侧边栏浮在内容区上面。

简单样例如下所示:

@Entry @Component struct SideBarContainerTest {

  build() {
    SideBarContainer(SideBarContainerType.Overlay) {
      Column() {
        Text("侧边栏区域")
          .width("100%")
          .height("100%")
          .fontSize(30)
          .textAlign(TextAlign.Center)
      }
      .width(10)
      .height("100%")
      .backgroundColor("#aabbcc")

      Column() {
        Text("侧边栏区域")
          .width("100%")
          .height("100%")
          .fontSize(30)
          .textAlign(TextAlign.Center)
      }
      .width("100%")
      .height("100%")
      .backgroundColor("#bbccaa")
    }
    .width('100%')
    .height('100%')
  }
}

样例运行结果如下图所示:

SideBarContainer属性介

  • showSideBar:设置是否显示侧边栏,默认为 true 表示显示侧边栏。
  • controlButton:设置侧边栏控制按钮的属性, ButtonStyle 参数说明如下:
    • left:设置侧边栏控制按钮距离容器左界限的间距。
    • top:设置侧边栏控制按钮距离容器上界限的间距。
    • width:设置侧边栏控制按钮的宽度。
    • height:设置侧边栏控制按钮的高度。
    • icons:设置侧边栏控制按钮的图标:
      • shown:设置侧边栏显示时控制按钮的图标。
      • hidden:设置侧边栏隐藏时控制按钮的图标。
      • switching:设置侧边栏显示和隐藏状态切换时控制按钮的图标。
  • sideBarWidth:设置侧边栏的宽度,默认为 200 。
  • minSideBarWidth:设置侧边栏最小宽度,默认为 200 。
  • maxSideBarWidth:设置侧边栏最大宽度,默认为 280 。

简单样例如下所示:

@Entry @Component struct SideBarContainerTest {

  build() {
    SideBarContainer(SideBarContainerType.Overlay) { // 设置侧边栏样式为悬浮态
      Column() {                                     // 第一个子组件为侧边栏视图
        Text("侧边栏区域")
          .width("100%")
          .height("100%")
          .fontSize(30)
          .textAlign(TextAlign.Center)
      }
      .width(10)
      .height("100%")
      .backgroundColor("#aabbcc")


      Column() {                                     // 第二个子组件为内容区视图
        Text("内容区域")
          .width("100%")
          .height("100%")
          .fontSize(30)
          .textAlign(TextAlign.Center)
      }
      .width("100%")
      .height("100%")
      .backgroundColor("#bbccaa")
    }
    .width('100%')
    .height('100%')
    .sideBarWidth(150)                               // 设置侧边栏宽度为150
    .minSideBarWidth(100)                            // 设置侧边栏最小宽度为100
    .maxSideBarWidth(200)                            // 设置侧边栏最大宽度为200
    .controlButton({                                 // 设置侧边栏控制按钮的样式
      width: 30,                                     // 设置侧边栏控制按钮宽度为30
      height: 30,                                    // 设置侧边栏控制按钮高度为30
      top: 15,                                       // 设置侧边栏控制按钮距离容器顶部为15
      icons: {                                       // 设置侧边栏控制按钮图片
        shown: $r("app.media.icon_back"),            // 设置侧边栏显示时控制按钮的图标。
        hidden: $r("app.media.icon_menu"),           // 设置侧边栏隐藏时控制按钮的图标。
        switching: $r("app.media.icon_back")         // 设置侧边栏显示和隐藏状态切换时控制按钮的图标。
      }
    })
  }
}

样例运行结果如下图所示:

SideBarContainer事件介绍

declare class SideBarContainerAttribute extends CommonMethod<SideBarContainerAttribute> {
  onChange(callback: (value: boolean) => void): SideBarContainerAttribute;
}
  • onChange:当侧边栏的状态在显示和隐藏之间切换时触发回调, value 为 true 表示菜单栏显示显示,false表示菜单栏隐藏。

官方示例

// xxx.ets
@Entry
@Component
struct SideBarContainerExample {
  normalIcon: Resource = $r("app.media.icon")
  selectedIcon: Resource = $r("app.media.icon")
  @State arr: number[] = [1, 2, 3]
  @State current: number = 1

  build() {
    SideBarContainer(SideBarContainerType.Embed) {
      Column() {
        ForEach(this.arr, (item, index) => {
          Column({ space: 5 }) {
            Image(this.current === item ? this.selectedIcon : this.normalIcon).width(64).height(64)
            Text("Index0" + item)
              .fontSize(25)
              .fontColor(this.current === item ? '#0A59F7' : '#999')
              .fontFamily('source-sans-pro,cursive,sans-serif')
          }
          .onClick(() => {
            this.current = item
          })
        }, item => item)
      }.width('100%')
      .justifyContent(FlexAlign.SpaceEvenly)
      .backgroundColor('#19000000')



      Column() {
        Text('SideBarContainer content text1').fontSize(25)
        Text('SideBarContainer content text2').fontSize(25)
      }
      .margin({ top: 50, left: 20, right: 30 })
    }
    .controlButton({
      icons: {
        hidden: $r('app.media.drawer'),
        shown: $r('app.media.drawer'),
        switching: $r('app.media.drawer')
      }
    })
    .sideBarWidth(150)
    .minSideBarWidth(50)
    .maxSideBarWidth(300)
    .onChange((value: boolean) => {
      console.info('status:' + value)
    })
  }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/634599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

WordPress主题 7B2 PRO 5.4.2 免授权开心版源码

本资源提供给大家学习及参考研究借鉴美工之用&#xff0c;请勿用于商业和非法用途&#xff0c;无任何技术支持&#xff01; WordPress主题 7B2 PRO 5.4.2 免授权开心版源码 B2 PRO 5.4.2 最新免授权版不再需要改hosts&#xff0c;和正版一样上传安装就可以激活。 直接在Word…

计算机精选期刊特辑

文章目录 一、征稿简介二、合作期刊三、投稿咨询四、咨询 一、征稿简介 艾思科蓝依托互联网信息与数据库技术、整合渠道与合作资源&#xff0c;提供EI/SCI/SCIE/SSCI期刊论文的内容审查、发表支持等服务。艾思科蓝与多所知名出版社达成战略合作关系&#xff0c;持续开展合作征…

【Unity】Rider无法调试团结引擎

近在学习unity&#xff0c;代码编辑器选择了熟悉的idea系列&#xff0c;C# 对应的编辑器 rider 之前在使用unity的时候&#xff0c;可以直接使用 Rider进行调试&#xff0c;很方便 但是后来又安装了团结引擎&#xff0c;在启动调试的时候断点总是无法激活 在点击调试按钮的时…

Vue文本溢出如何自动换行

css新增 word-break: break-all; word-wrap: break-word;

如何在没有密码或Face ID的情况下解锁iPhone

iPhone 是一款以其一流的安全功能而闻名的设备&#xff0c;包括面容 ID 和密码。但是&#xff0c;你有没有想过&#xff0c;如果没有这些安全措施&#xff0c;你是否可以解锁iPhone&#xff1f;无论您是忘记了密码&#xff0c;Face ID不起作用&#xff0c;还是只是对其他方法感…

浅析declval关键字

浅析 declval 关键字 文章目录 浅析 declval 关键字前言declval 的基本概念declval 的工作原理declval 的实际应用案例总结 前言 ​ 在现代C编程中&#xff0c;std::declval是一个非常有用的工具&#xff0c;它允许我们在不实例化对象的情况下使用其类型。这在模板元编程中尤其…

Git系列:git rm 的高级使用技巧

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

实用css整理

网页一键变灰 body{filter: grayscale(1); } 一般用于特殊时期&#xff0c;网页变灰&#xff0c;只需要给body标签添加这行样式代码。 一键换主题色 body {filter: hue-rotate(45deg);} 给body标签设置这个属性样式&#xff0c;改变角度看看效果吧。 设置字母大小写 p {t…

ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1

一、安装Visual Studio Code 下载地址&#xff1a;Download Visual Studio Code - Mac, Linux, Windows 打开上方链接&#xff0c;选择页面中的Windows版本&#xff0c;单击下载 将下载好的VSCodeUserSetup-x64-1.89.1.exe。单击右键&#xff0c;选择以管理员身份运行&#xf…

网络安全之BGP详解

BGP&#xff1b;边界网关协议 使用范围&#xff1b;BGP范围&#xff0c;在AS之间使用的协议。 协议的特点&#xff08;算法&#xff09;&#xff1a;路径矢量型&#xff0c;没有算法。 协议是否传递网络掩码&#xff1a;传递网络掩码&#xff0c;支持VLSM&#xff0c;CIDR …

【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)

最终效果 系列导航 文章目录 最终效果系列导航前言血条 能量条UI配置画布绘制血条 能量条UI 头像框 延迟虚血源码参考完结 前言 欢迎来到【制作100个Unity游戏】系列&#xff01;本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第26篇中&#xff0c;我们将探索…

ESP8266 作为客户端 透传的实验

配置流程 1.配置WIFI模式 ATCWMODE1 配置成Station模式 2.完成配置后重启 ATRST 重启 3.连接路由器 ATCWJAP“777”,“123456lzg” 连接wifi 4.配置单路连接模式 ATCIPMUX0 5.开启透传模式 ATCIPMODE1 6.建立TCP连接 ATCIPSTART“TCP”,“172.20.10.10”,8081 //注意服务器和es…

鸿蒙OS开发:【一次开发,多端部署】(典型布局场景)

典型布局场景 虽然不同应用的页面千变万化&#xff0c;但对其进行拆分和分析&#xff0c;页面中的很多布局场景是相似的。本小节将介绍如何借助自适应布局、响应式布局以及常见的容器类组件&#xff0c;实现应用中的典型布局场景。 布局场景实现方案 开发前请熟悉鸿蒙开发指导…

[机器学习聚类算法实战-1] | Scikit-Learn工具包进阶指南:机器学习聚类算法之层次聚类、特征集聚、均值移位聚类、k-均值聚类实战分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

面试八股之线程篇2.7——线程中的并发锁篇——死锁与并发程序的问题

文章目录 2.6 synchronized和Lock有什么区别 ?2.7 死锁产生的条件是什么&#xff1f;2.8 如何进行死锁诊断&#xff1f;2.10 ConcurrentHashMap&#xff08;1&#xff09; JDK1.7中concurrentHashMap&#xff08;2&#xff09; JDK1.8中concurrentHashMap 2.11 导致并发程序出…

如何将Docker容器打包并在其他服务器上运行

如何将Docker容器打包并在其他服务器上运行 我会幻想很多次我们的相遇&#xff0c;你穿着合身的T恤&#xff0c;一个素色的外套&#xff0c;搭配一条蓝色的牛仔裤&#xff0c;干净的像那天空中的云朵&#xff0c;而我&#xff0c;还是一个的傻傻的少年&#xff0c;我们相识而笑…

洗地机品牌哪个牌子好?实力派洗地机品牌TOP10榜单

洗地机依靠其洗、拖、吸、烘为一体的功能&#xff0c;能高效的完成地面清洁的工作&#xff0c;深受大家的喜爱。但是洗地机的型号越来越多&#xff0c;功能也越来越多&#xff0c;对于不想花大价钱&#xff0c;又想要高性价比的精致人群来说实在不友好&#xff0c;所以笔者今天…

QMT如何编写策略获取沪深指数数据?(附开通QMT全攻略)

获取指数代码列表 提示 为了获取指数合约列表,首先需要使用函数get_sector_list来获取需要查询的指数索引。具体的索引信息可以通过键入您感兴趣的索引名&#xff08;例如&#xff1a;"沪深指数"或"上证指数"&#xff09;等获得。接下来&#xff0c;通过…

《Effective Objective-C 2.0》读书笔记——对象、消息、运行期

目录 第二章&#xff1a;对象、消息、运行期第6条&#xff1a;理解“属性”这一概念第7条&#xff1a;在对象内部尽量直接访问实例变量第8条&#xff1a;理解“对象等同性”这一概念第9条&#xff1a;以“类族模式”隐藏实现细节第10条&#xff1a;在既有类中使用关联对象存放自…

域内 dcsync 权限维持

一、原理 DCSync 是域渗透中经常会用到的技术&#xff0c;其被整合在了 Mimikatz 中。在 DCSync 功能出现之前&#xff0c;要想获得域用户的哈希&#xff0c;需要登录域控制器&#xff0c;在域控制器上执行代码才能获得域用户的哈希。 Mimikatz的DCSync 功能&#xff1a; 该…