鸿蒙HarmonyOS实战-ArkUI组件(GridRow GridCol)_gridview 鸿蒙

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新HarmonyOS鸿蒙全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img

img
img
htt

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上鸿蒙开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip204888 (备注鸿蒙)
img

正文

断点名称设备描述
xs最小宽度类型设备
sm小宽度类型设备
md中等宽度类型设备
lg大宽度类型设备
xl特大宽度类型设备
xxl超大宽度类型设备

在GridRow栅格组件中,开发者可以使用breakpoints自定义修改断点的取值范围,最多支持6个断点。除了默认的四个断点以外,还可以启用xl,xxl两个断点,支持六种不同尺寸(xs, sm, md, lg, xl, xxl)设备的布局设置。

定于如下:

breakpoints: {
value: [‘200vp’, ‘300vp’, ‘400vp’, ‘500vp’, ‘600vp’],
reference: BreakpointsReference.WindowSize
}

案例如下:

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
build() {
GridRow({
breakpoints: {
value: [‘200vp’, ‘300vp’, ‘400vp’, ‘500vp’, ‘600vp’],
reference: BreakpointsReference.WindowSize //断点切换参考物
}
}) {
ForEach(this.bgColors, (color, index) => {
GridCol({
span: {
xs: 2, // 在最小宽度类型设备上,栅格子组件占据的栅格容器2列。
sm: 3, // 在小宽度类型设备上,栅格子组件占据的栅格容器3列。
md: 4, // 在中等宽度类型设备上,栅格子组件占据的栅格容器4列。
lg: 6, // 在大宽度类型设备上,栅格子组件占据的栅格容器6列。
xl: 8, // 在特大宽度类型设备上,栅格子组件占据的栅格容器8列。
xxl: 12 // 在超大宽度类型设备上,栅格子组件占据的栅格容器12列。
}
}) {
Row() {
Text(${index})
}.width(“100%”).height(‘50vp’)
}.backgroundColor(color)
})
}
}
}

在这里插入图片描述

2.2 布局的总列数

栅格布局的列数是指将页面宽度分为多少等分,一般情况下栅格布局的列数为12列,即将页面宽度分为12等分,每列所占宽度相等。这样可以方便地将页面元素放置到网格系统中,达到快速搭建页面的目的。同时,栅格布局的列数也可以根据具体的需求进行调整,并不一定非要是12列。

1、默认列数

columns默认值为12,即在未设置columns时,任何断点下,栅格布局被分成12列。

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
build() {
GridRow() {
ForEach(this.bgColors, (item, index) => {
GridCol() {
Row() {
Text(${index + 1})
}.width(‘100%’).height(‘50’)
}.backgroundColor(item)
})
}
}
}

在这里插入图片描述
2、设置列数

当columns为自定义值,栅格布局在任何尺寸设备下都被分为columns列。

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
@State currentBp: string = ‘unknown’;
build() {
Row() {
GridRow({ columns: 4 }) {
ForEach(this.bgColors, (item, index) => {
GridCol() {
Row() {
Text(${index + 1})
}.width(‘100%’).height(‘50’)
}.backgroundColor(item)
})
}
.width(‘100%’).height(‘100%’)
.onBreakpointChange((breakpoint) => {
this.currentBp = breakpoint
})
}
.height(160)
.border({ color: Color.Blue, width: 2 })
.width(‘100%’)
}
}

在这里插入图片描述
3、公用

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
@State currentBp: string = ‘unknown’;
build() {
GridRow({ columns: { sm: 4, md: 8 }, breakpoints: { value: [‘200vp’, ‘300vp’, ‘400vp’, ‘500vp’, ‘600vp’] } }) {
ForEach(this.bgColors, (item, index) => {
GridCol() {
Row() {
Text(${index + 1})
}.width(‘100%’).height(‘50’)
}.backgroundColor(item)
})
}
}
}

在这里插入图片描述

若只设置sm, md的栅格总列数,则较小的尺寸使用默认columns值12,较大的尺寸使用前一个尺寸的columns。这里只设置sm:4, md:8,则较小尺寸的xs:12,较大尺寸的参照md的设置,lg:8, xl:8, xxl:8。

2.3 排列方向

可以通过设置GridRow的direction属性来指定栅格子组件在栅格容器中的排列方向。

该属性可以设置为

  • GridRowDirection.Row(从左往右排列)
  • GridRowDirection.RowReverse(从右往左排列)

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
@State currentBp: string = ‘unknown’;
build() {
GridRow({ columns: { sm: 4, md: 8 }, breakpoints: { value: [‘200vp’, ‘300vp’, ‘400vp’, ‘500vp’, ‘600vp’] } ,direction: GridRowDirection.RowReverse}) {
ForEach(this.bgColors, (item, index) => {
GridCol() {
Row() {
Text(${index + 1})
}.width(‘100%’).height(‘50’)
}.backgroundColor(item)
})
}
}
}

在这里插入图片描述

2.4 子组件间距

可以通过设置GridRow的gutter属性来指定栅格子组件在栅格容器中的排列方向。

该属性可以设置为

  • 单个值GridRow({ gutter: 10 }){}(X:10,Y:10)
  • 多个值GridRow({ gutter: { x: 20, y: 50 } }){}(X:20,Y:50)

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
@State currentBp: string = ‘unknown’;
build() {
GridRow({ columns: { sm: 4}, breakpoints: { value: [‘200vp’, ‘300vp’, ‘400vp’, ‘500vp’, ‘600vp’] } ,direction: GridRowDirection.RowReverse,gutter: { x: 20, y: 50 }}) {
ForEach(this.bgColors, (item, index) => {
GridCol() {
Row() {
Text(${index + 1})
}.width(‘100%’).height(‘50’)
}.backgroundColor(item)
})
}
}
}

在这里插入图片描述

3.子组件GridCol

GridCol组件作为GridRow组件的子组件,通过给GridCol传参或者设置属性两种方式,设置span(占用列数),offset(偏移列数),order(元素序号)的值。

设置span。

GridCol({ span: 2 }){}
GridCol({ span: { xs: 1, sm: 2, md: 3, lg: 4 } }){}
GridCol(){}.span(2)
GridCol(){}.span({ xs: 1, sm: 2, md: 3, lg: 4 })

设置offset。

GridCol({ offset: 2 }){}
GridCol({ offset: { xs: 2, sm: 2, md: 2, lg: 2 } }){}
GridCol(){}.offset(2)
GridCol(){}.offset({ xs: 1, sm: 2, md: 3, lg: 4 })

设置order。

GridCol({ order: 2 }){}
GridCol({ order: { xs: 1, sm: 2, md: 3, lg: 4 } }){}
GridCol(){}.order(2)
GridCol(){}.order({ xs: 1, sm: 2, md: 3, lg: 4 })

3.1 span

在栅格布局中,span属性表示某个元素或组件应该跨越的列数。例如,如果我们有一个包含12个列的栅格系统,我们可以使用span属性来指定一个元素应该占用多少列。

例如,如果我们希望一个元素占用3列,我们可以使用{ span: 3 },这将使元素跨越3列。同样,如果我们希望元素跨越整个栅格系统,我们可以使用{ span: 12 }

在具体的代码实现中,不同的栅格系统可能会使用不同的方式实现span属性,但通常都会提供类似于{ span: 3 }的语法来指定元素所占据的列数。

1、当类型为number时,子组件在所有尺寸设备下占用的列数相同。

@Entry
@Component
struct Index {
@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];
@State currentBp: string = ‘unknown’;
build() {
GridRow({ columns: 8 }) {
ForEach(this.bgColors, (color, index) => {
GridCol({ span: 2 }) {
Row() {
Text(${index})
}.width(‘100%’).height(‘50vp’)
}
.backgroundColor(color)
})
}
}
}

在这里插入图片描述
2、当类型为GridColColumnOption时,支持六种不同尺寸(xs, sm, md, lg, xl, xxl)设备中子组件所占列数设置,各个尺寸下数值可不同。

@State bgColors: Color[] = [Color.Red, Color.Orange, Color.Yellow, Color.Green, Color.Pink, Color.Grey, Color.Blue, Color.Brown];

GridRow({ columns: 8 }) {
ForEach(this.bgColors, (color, index) => {
GridCol({ span: { xs: 3, sm: 3, md: 3, lg: 3 } }) {
Row() {
Text(${index})
}.width(‘100%’).height(‘50vp’)
}
.backgroundColor(color)
})
}

在这里插入图片描述

3.2 offset

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

在这里插入图片描述

3.2 offset

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip204888 (备注鸿蒙)
[外链图片转存中…(img-BnLsb8C0-1713649455294)]

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 28
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 首先,需要导入IndentedTOC类: ```python from markdown_indented_toc import IndentedTOC ``` 然后,可以使用IndentedTOC类来创建一个实例。比如: ```python indented_toc = IndentedTOC() ``` 接着,使用IndentedTOC实例的convert_markdown_to_toc方法将Markdown文本转换为目录,比如: ```python markdown_text = """ # Title 1 ## Subtitle 1.1 ## Subtitle 1.2 # Title 2 ## Subtitle 2.1 ### Subsubtitle 2.1.1 """ indented_toc.convert_markdown_to_toc(markdown_text) ``` 最后,使用IndentedTOC实例的get_markdown_toc方法获取转换后的Markdown目录,比如: ```python print(indented_toc.get_markdown_toc()) ``` 输出的目录格式如下: ``` - Title 1 - Subtitle 1.1 - Subtitle 1.2 - Title 2 - Subtitle 2.1 - Subsubtitle 2.1.1 ``` 上面代码片段演示了如何使用IndentedTOC类来将Markdown文本转换为缩进形式的目录。 ### 回答2: class IndentedTOC(TableOfContents) 是一个继承自 TableOfContents 的类,可用于创建带缩进的目录。 具体使用 IndentedTOC 的步骤如下: 1. 导入必要的类库和模块: ``` from docx import Document from docx.oxml.ns import qn from docx.text.table import Table from docx.oxml import OxmlElement ``` 2. 创建 IndentedTOC 对象: ``` indented_toc = IndentedTOC() ``` 3. 设置目录的标题和级别: ``` indented_toc.title = "目录" # 设置目录的标题 indented_toc.level = 2 # 设置目录的级别,通常是 1、2、3 ``` 4. 将目录插入到文档: ``` document.add_paragraph().add_run().add_toc(indented_toc.level, indented_toc.title) ``` 5. 为目录设置缩进: ``` for paragraph in document.paragraphs: if paragraph.text == indented_toc.title: toc_element = paragraph._p toc_element.addprevious(OxmlElement('w:pPr')) ppr = toc_element.previous_sibling ppr.append(OxmlElement('w:ind', attrib={"w:left": "720", "w:hanging": "360"})) break ``` 6. 更新文档中的目录: ``` indented_toc.update_toc(document) ``` 通过以上步骤,就能够具体使用 class IndentedTOC(TableOfContents) 创建带缩进的目录。 ### 回答3: class IndentedTOC(TableOfContents) 是一个用于生成缩进式目录的类。我们可以通过继承这个类,来定制具体的缩进式目录。下面以一个简单的示例来说明如何使用该类: 首先,我们需要导入所需的类: ```python from docx import Document from docx.enum.text import WD_PARAGRAPH_ALIGNMENT from docx.oxml.ns import nsdecls from docx.oxml import parse_xml from docx.table import Table from docx.shared import Inches from docx.oxml.ns import nsdecls ``` 然后,我们可以创建一个类来继承 IndentedTOC(TableOfContents): ```python class MyIndentedTOC(IndentedTOC): def __init__(self, document): super().__init__(document) def add_paragraph(self, index, text): paragraph = self.document.add_paragraph('', style='TOC Heading') paragraph.alignment = WD_PARAGRAPH_ALIGNMENT.LEFT tab = parse_xml(r'<w:tbl><w:tblPr><w:tblW w:w="5000" w:type="dxa"/></w:tblPr><w:tblGrid><w:gridCol w:w="5000"/></w:tblGrid><w:tr><w:tc><w:tcPr><w:tcW w:w="5000" w:type="dxa"/></w:tcPr><w:p><w:r><w:t>'+text+'</w:t></w:r></w:p></w:tc></w:tr></w:tbl>').getroot() p = paragraph._p p.append(tab) ``` 在上述代码中,我们在类中添加了一个 add_paragraph 方法来定制目录的样式。该方法先创建一个空的段落,并将对齐方式设置为左对齐。然后,在段落内添加一个表格,并将该表格的列宽和文本设置为我们想要的样式。 接下来,我们可以使用这个自定义的缩进式目录类生成具体的目录。以下是一个使用示例: ```python document = Document() # 创建一个新的 Word 文档 my_toc = MyIndentedTOC(document) # 使用自定义的缩进式目录类创建目录对象 # 添加标题 title = document.add_paragraph('示例文档', 'Title') title.alignment = WD_PARAGRAPH_ALIGNMENT.CENTER # 添加章节标题 chapter_1_title = document.add_paragraph('第一章', 'Heading1') chapter_2_title = document.add_paragraph('第二章', 'Heading1') # 添加小节标题 document.add_paragraph('1.1 小节 1', 'Heading2') document.add_paragraph('1.2 小节 2', 'Heading2') document.add_paragraph('2.1 小节 1', 'Heading2') document.add_paragraph('2.2 小节 2', 'Heading2') # 生成目录 my_toc.add_paragraph(1, '第一章') # 通过自定义的方法添加目录项 my_toc.add_paragraph(2, '第二章') # 通过自定义的方法添加目录项 document.save('example.docx') # 保存文档 ``` 以上代码中,我们首先创建了一个新的 Word 文档。然后,使用自定义的类 MyIndentedTOC 创建了目录对象 my_toc。在添加标题、章节和小节标题之后,通过调用 my_toc 的 add_paragraph 方法来生成目录项。最后,保存文档为 example.docx。 通过上述示例,我们可以看到如何使用 class IndentedTOC(TableOfContents) 类来生成缩进式目录,并通过继承这个类来进行定制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值