本篇我们熟悉响应式布局、栅格、断点,来实现页面设计。我们先了解相关概念:
响应式布局,可以在不同设备、不同屏幕尺寸上,良好的像是布局内容,也可以根据不同设备和屏幕尺寸灵活调整。我们用官网给出的两个示意图来看一下效果:

下面我们看看响应式布局的四种能力:
响应式布局中最常使用的特征是窗口宽度及窗口高宽比,可以将窗口宽度及窗口高宽比划分为不同的范围,称之为“断点”。
因此,系统设计了横向和纵向断点分别代表窗口的不同特征,作为判断页面布局和交互体验的条件:
断点定义,我们上篇也已经说明,官方给了如下两种断点定义方式。

官方也给我们定义的HarmonyOS常用设备断点区间表:

区间说明:
获取当前串口横向断点,这里我们根据屏幕宽度,判断断点名称,并存储在AppStorage以同步刷新UI布局。

通过“windowSizeChange”,实时检测窗口尺寸大小变化。

3.获取本地保存的断点。
需求
1、sm/md:导航栏再底部
2、lg:导航栏在左侧
效果如下:


断点介绍完了,我们学习一下响应式布局的另一个能力,栅格,官网中对栅格的定义是:一种用于页面布局的二位网格结构,是多场景下通用的腐竹定位工具。它将页面水平划分为等宽的列,通过设置内容与占据的列数,来实现灵活布局。
HarmonyOS的栅格系统采用了12列设计,因为12可以被2、3、4、6整除,提供了更灵活的布局可能性。栅格布局主要优势包括:

栅格样式由Margin、Gutter、Columns三个属性决定
注: 单个Column的宽度,是结合Margin、Gutter和Columns自动计算的,不需要开发者手动配置。
以竖屏手机的栅格宽度计算为例:
屏幕宽度:360vp
Margin: 24vp
Gutter: 24vp
栅格数: 4个(含3个Gutter)
计算公式如下:
1个栅格的宽度 = (屏幕宽度 - Margin x 2 - Gutter x 3)/4 = (360 - 24 x 2 - 24 x 3)/4 = 60(vp)
2个栅格的宽度 = 1个栅格的宽度 + Gutter + 1个栅格的宽度 = 60 + 24 + 60 = 144(vp)
3个栅格的宽度 = 2个栅格的宽度 + Gutter + 1个栅格的宽度 = 144 + 24 + 60 = 228(vp)
4个栅格的宽度 = 3个栅格的宽度 + Gutter + 1个栅格的宽度 = 228 + 24 + 60 = 312(vp)
综合权衡各类设备的屏幕特征,基于 8vp 为网格的基本单位可以对界面上元素的大小、位置、对齐方式进行更好的规划,构建更有层次感、秩序感,以及多设备上一致的布局效果。一些更小的控件(例如图标)大小也可以对齐 4vp 的网格大小。栅格化布局中的Margin和Gutter的值参考8vp/4vp网格系统设置。如,手机设备上的栅格化设计,基础栅格Margin为24vp,等于3个8vp的宽度;卡片栅格Margin为12vp,等于一个8vp加上一个4vp的宽度。
各类设备的栅格数、Margin、Gutter的参数,如下表所示:

栅格布局就是栅格结合了断点,实现栅格布局能力的组件叫栅格组件。在实际使用场景中,可以根据需要配置不同断点下栅格组件中元素占据的列数,同时也可以调整Margin、Gutter、Columns的取值,从而实现不同的布局效果。

说明
ArkUI在API 9对栅格组件做了重构,推出了新的栅格组件GridRow和GridCol,同时原有的GridContainer组件及栅格设置已经废弃。
本文中提到的栅格组件,如无特别说明,都是指GridRow和GridCol组件。
本篇我们学习了响应式布局下的断点、栅格,下篇我们用栅格结合断点,做一个简单的登录页面。
特别声明:内容总结来源华为开发者联盟官网,仅记录总结学习,如有侵权或不对之处,还请告知,定当删除或改正!!!
原文作者:这个Bug有点难搞;如有侵权,请联系管理员删除。