赞
踩
栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题,保证不同设备上各个模块的布局一致性。
栅格容器组件,仅可以和栅格子组件(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 | 否 | 栅格布局排列方向。 |
从API version 9开始,该接口支持在ArkTS卡片中使用。
参数名 | 参数类型 | 必填 | 参数描述 |
---|---|---|---|
x | Length | GridRowSizeOption | 否 | 水平gutter option。 |
y | Length | GridRowSizeOption | 否 | 竖直gutter option。 |
栅格在不同宽度设备类型下,栅格列数。
从API version 9开始,该接口支持在ArkTS卡片中使用。
参数名 | 参数类型 | 必填 | 参数描述 |
---|---|---|---|
xs | number | 否 | 最小宽度类型设备。 |
sm | number | 否 | 小宽度类型设备。 |
md | number | 否 | 中等宽度类型设备。 |
lg | number | 否 | 大宽度类型设备。 |
xl | number | 否 | 特大宽度类型设备。 |
xxl | number | 否 | 超大宽度类型设备。 |
栅格在不同宽度设备类型下,gutter的大小。
从API version 9开始,该接口支持在ArkTS卡片中使用。
参数名 | 参数类型 | 必填 | 参数描述 |
---|---|---|---|
xs | Length | 否 | 最小宽度类型设备。 |
sm | Length | 否 | 小宽度类型设备。 |
md | Length | 否 | 中等宽度类型设备。 |
lg | Length | 否 | 大宽度类型设备。 |
xl | Length | 否 | 特大宽度类型设备。 |
xxl | Length | 否 | 超大宽度类型设备。 |
从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"]}
从API version 9开始,该接口支持在ArkTS卡片中使用。
枚举名 | 描述 |
---|---|
WindowSize | 以窗口为参照。 |
ComponentSize | 以容器为参照。 |
从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) |
说明:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
---|---|---|---|---|---|---|---|---|---|---|---|
∘ | ∘ | ∘ | ∘ | ∘ | ∘ | - | - | - | - | - | - |
- | - | - | - | - | |||||||
∘ | ∘ | ∘ | ∘ | ∘ | ∘ | ∘ | ∘ |
支持通用属性。
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 })
- }
- }
- interface GridContainerInterface {
- (value?: GridContainerOptions): GridContainerAttribute;
- }
-
- declare interface GridContainerOptions {
- columns?: number | "auto";
- sizeType?: SizeType;
- gutter?: number | string;
- margin?: number | string;
- }
value:设置布局的可选参数, GridContainerOptions
说明如下:
auto
。SizeType
参数说明如下:
简单样例如下所示:
- @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
的简单使用。
- interface SideBarContainerInterface {
- (type?: SideBarContainerType): SideBarContainerAttribute;
- }
SideBarContainerType
定义了一下 2 中类型:
简单样例如下所示:
- @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%')
- }
- }
样例运行结果如下图所示:
ButtonStyle
参数说明如下:
简单样例如下所示:
- @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") // 设置侧边栏显示和隐藏状态切换时控制按钮的图标。
- }
- })
- }
- }
样例运行结果如下图所示:
- declare class SideBarContainerAttribute extends CommonMethod<SideBarContainerAttribute> {
- onChange(callback: (value: boolean) => void): SideBarContainerAttribute;
- }
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)
- })
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。