理解 HarmonyOS 中的网格布局:综合指南

2024-08-24 18:20

本文主要是介绍理解 HarmonyOS 中的网格布局:综合指南,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网格布局是创建响应式和结构化用户界面的强大工具。通过将界面划分为由行和列组成的单元格,网格可以精确控制组件的分布和对齐。这使得它们成为各种应用程序(例如图库、日历和计算器)的理想选择。

在 HarmonyOS 中,ArkUI 提供了用于构建网格布局的Grid容器和GridItem组件。Grid组件用于定义网格的结构,而GridItem组件指定每个单元格内的内容。HarmonyOS 网格支持条件渲染、循环渲染和延迟加载等高级功能,以高效处理大型数据集。

布局和约束

组件Grid充当网格容器,每个网格项由一个GridItem组件表示。它们之间的关系如下:

Grid
└── GridItem└── Component

注意: Grid组件必须只能包含GridItem作为子组件的组件。

网格布局本质上是二维的,提供垂直和水平排列功能。它们可以适应容器尺寸的变化,确保响应式设计。根据设置,您可以创建各种网格布局,例如下面显示的布局:

Grid Layout Variants
└── Evenly Distributed Grid
└── Asymmetrical Grid
└── Scrollable Grid

关键行为:

  • 如果同时设置了Grid组件的宽度和高度,它将占据指定的尺寸。
  • 如果未设置尺寸,则将Grid适应其父容器的大小。

组件Grid的布局根据行和列的配置可以分为三种类型:

  1. **固定行和列:**显示固定数量的元素而不滚动。
  2. **动态行或列:**根据设置的行数或列数,以可滚动的布局显示元素。
  3. **灵活布局:**根据方向和网格大小布局元素,如果不适合则隐藏多余的元素。
配置行和列

网格布局的整体结构通过设置行数和列数以及它们的尺寸比例来定义。Grid组件使用rowsTemplatecolumnsTemplate属性来实现此目的。

例子:

Grid() {...
}
.rowsTemplate('1fr 1fr 1fr') // Three equally sized rows
.columnsTemplate('1fr 2fr 1fr') // Three columns, with the middle column twice the size of the others

**注意:**设置rowsTemplate或时,其他属性(如、和)将被忽略。columnsTemplate``layoutDirection``maxCount``minCount

管理跨越和不对称

在实际应用中,网格通常包含跨多行或多列的项目,例如计算器键或日历日期。这可以通过配置来实现GridLayoutOptions

例子:

layoutOptions: GridLayoutOptions = {regularSize: [1, 1],onGetRectByIndex: (index: number) => {if (index == key1) { // Key "0"return [5, 0, 1, 2]} else if (index == key2) { // Key "="return [4, 3, 2, 1]}}
}Grid(undefined, this.layoutOptions) {// Grid content here
}
.columnsTemplate('1fr 1fr 1fr 1fr')
.rowsTemplate('2fr 1fr 1fr 1fr 1fr 1fr')

此代码将“0”键跨越两列,将“=”键跨越两行。

设置布局方向

如果您未设置行和列模板,则可以使用来layoutDirection确定项目在网格内的排列方式。

例子:

Grid() {...
}
.maxCount(3)
.layoutDirection(GridDirection.Row) // Items will fill rows first

行为:

  • **行方向:**项目按从左到右的顺序排列,并根据需要换行到下一行。
  • **列方向:**项目按从上到下的顺序排列,并换行到下一列。
以网格布局显示数据

网格布局可以有效地显示一组项目,尤其是当内容相似时,例如服务列表。

例子:

@Entry
@Component
struct OfficeService {@State services: Array<string> = ['Meeting', 'Check-in', 'Vote', 'Print']build() {Column() {Grid() {ForEach(this.services, (service:string) => {GridItem() {Text(service)}}, (service:string):string => service)}.rowsTemplate(('1fr 1fr') as string).columnsTemplate(('1fr 1fr') as string)}}
}

在这里插入图片描述

管理网格项之间的间距

rowsGap可以使用和属性来控制行和列之间的空间columnsGap

例子:

Grid() {...
}
.columnsGap(10) // 10px gap between columns
.rowsGap(15) // 15px gap between rows
创建可滚动的网格

可滚动网格对于显示大量内容(例如在文件管理器或购物应用中)至关重要。当仅设置rowsTemplate或之一时columnsTemplate,网格将变为可滚动的。

例子:

@Entry
@Component
struct Shopping {@State services: Array<string> = ['Live', 'Imports']build() {Column({ space: 5 }) {Grid() {ForEach(this.services, (service: string, index) => {GridItem() {}.width('25%')}, (service:string):string => service)}.rowsTemplate('1fr 1fr') // Scrolls horizontally if content exceeds width.rowsGap(15)}}
}
控制滚动位置

网格中的滚动控制对于用户体验至关重要,例如翻阅日历中的页面。

例子:

private scroller: Scroller = new Scroller()Column({ space: 5 }) {Grid(this.scroller) {}.columnsTemplate('1fr 1fr 1fr 1fr 1fr 1fr 1fr')Row({space: 20}) {Button('Previous Page').onClick(() => {this.scroller.scrollPage({next: false})})Button('Next Page').onClick(() => {this.scroller.scrollPage({next: true})})}
}
使用延迟加载进行性能优化

对于大型数据集,建议使用延迟加载来优化性能。您可以使用该cachedCount属性控制网格项的预加载,以确保平滑滚动。

例子:

Grid() {LazyForEach(this.dataSource, () => {GridItem() {}})
}
.cachedCount(3) // Preload 3 items before and after the visible area

**注意:**增加cachedCount可改善用户体验,但可能会增加 CPU 和内存的使用率。

结论

HarmonyOSGrid组件是一款多功能工具,可用于创建复杂且响应迅速的网格布局。无论您是构建简单的网格还是复杂的可滚动界面,了解和利用各种属性和选项都可以让您创建高效且具有视觉吸引力的设计。

这篇关于理解 HarmonyOS 中的网格布局:综合指南的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103247

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多