HarmonyOS栅格布局---GridRow

题外话:栅格布局最初是在web 端应用的,为了解决一个系统在不同的屏幕,和不同的设备上可以不进行多次开发的问题,希望一次开发可以最大化的适配用户的不同类型设备,解决方案:将屏幕采用断点的方式进行布局分割,然后通过响应式布局方式实现不同的屏幕上展示不同布局的方式。

而HarmonyOS 目前作为移动端的操作系统之一,各大厂家的设备屏幕大小不一样,如何让一套代码适配多个屏幕呢?从API9 开始引入了这样的设计,设计了GridRow 容器和子组件GridCol
这个容器harmonyOS 工程师 写的自定义组件,但是使用方的开发者,为了让开发者更方便的使用以上场景所说的问题,设计思路如下:
1 有一定的规律性,将布局划分为等宽列数和行数,这样就可以方便的对页面布局元素进行定位和排版。
2 统一的定位标注(什么是定位标注)
3 不同设备上元素在不同设备展示的时候如果只元素发生变化,间距不发生变化,那么界面会非常的丑,为了解决这个问题引入了距离调整方法,
4 不同的屏幕大小下每行每列展示的元素数量不一样,如果超过一行或者一列如何解决,希望实现自动换行。

解决方案:首先将移动设备的屏幕按照宽度作为断点的依据,分为了xs、sm、md、lg四类,尺寸范围如下::
在这里插入图片描述在GridRow栅格组件中,允许开发者使用breakpoints自定义修改断点的取值范围,最多支持6个断点,除了默认的四个断点外,还可以启用xl,xxl两个断点,支持六种不同尺寸(xs, sm, md, lg, xl, xxl)设备的布局设置。
在这里插入图片描述设置方式: breakpoints: {value: [‘320vp’, ‘520vp’, ‘840vp’, ‘1080vp’]}
表示启用xs、sm、md、lg、xl共5个断点,小于320vp为xs,320vp-520vp为sm,520vp-840vp为md,840vp-1080vp为lg,大于1080vp为xl。
UI的布局宽度有两种表达方式 1 在不是满屏的情况下用容器宽度 ComponentSize 2 在满屏的情况下用窗口宽度WindowSize
用reference 属性进行设置:

GridRow({breakpoints: {value: ['200vp', '300vp', '400vp', '500vp', '600vp'],reference: BreakpointsReference.WindowSize}

})


**栅格容器默认将屏幕的宽度划分为12列,可以通过对子组件的span 设置不同的断点下子元素占用的屏幕宽度。**
GridRow({breakpoints: {value: ['200vp', '300vp', '400vp', '500vp', '600vp'],reference: BreakpointsReference.WindowSize}
}){GridCol({span: {xs: 2, // 在最小宽度类型设备上,栅格子组件占据的栅格容器2列。sm: 3, // 在小宽度类型设备上,栅格子组件占据的栅格容器3列。md: 4, // 在中等宽度类型设备上,栅格子组件占据的栅格容器4列。lg: 6, // 在大宽度类型设备上,栅格子组件占据的栅格容器6列。xl: 8, // 在特大宽度类型设备上,栅格子组件占据的栅格容器8列。xxl: 12 // 在超大宽度类型设备上,栅格子组件占据的栅格容器12列。}}){具体的子组件内的布局}.backgroundColor(color)}**同时可以将父容器GridRow栅格容器的列数通过columens 的属性修改,比如修改为6,意味着在不同的断点下,子组件最大的列为6列*
GridRow({ columns: 6 }) {}
也可以在不同的断点下对栅格容器的列进行定义:GridRow({ columns: { sm: 4, md: 8 }, breakpoints: { value: ['200vp', '300vp', '400vp', '500vp', '600vp'] } }) {}

*代表:小于等于sm 大小的屏幕最大列数都是4,而大于等于md 屏幕大小的列数都是8.

那么下面是什么意思呢?


GridRow({ columns: { sm: 4, md: 8,lg: 12}, breakpoints: { value: ['200vp', '300vp', '400vp', '500vp', '600vp'] } }) {}

GridRow 默认的布局方向是水平方向,并且是从左到右,有些布局是从右到左如何设置。可以通过direction
GridRow({ direction: GridRowDirection.RowReverse }){}

GridRow通过gutter属性设置子元素在水平和垂直方向的间距。
不能在不同的断点下设置间距

如果只写数字,那么代表水平和垂直方向都是固定的间距如设置水平和垂直方向的间距都为20
GridRow({ gutter: 20}){}
也可以水平和垂直方向单独设置如:
GridRow({ gutter: {x:20,y:30}}){}

对于子组件GridCol 的设置重点三个属性
1 span 代表 子组件在父容器中占用的列数。
可以设置在所有的断点下都占用2列数如:

  Row() {GridRow({ columns: 8}){GridCol({span:2 })}

也可以在不同的断点下设置不同的列数

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

2 offset 偏移量,代表子组件在屏幕宽度分割列后,每个子组件和前面的子组件间隔几个组件,默认是0
比如:屏幕默认12列,设置每个子组件之间间隔2列
GridRow() {

  GridCol({ offset: 2 }) {     }}

可也是在不同的断点下设置偏移量如:将屏幕分割成8列,
GridRow({ columns: 8 }) {
GridCol({ offset: { xs: 1, sm: 2, md: 3, lg: 4 } }) { }
}
3 order 用来设置子组件的顺序,顺序按照设置值从小到大排序,如果没有设置值按照组件顺序排序,默认值为0

通过这些属性可以实现金刚区在不同的屏幕下不同的展示效果:
如金刚区的入口总计12个,在xms 下每行展示3个,在lg 的屏幕下每行展示12个
GridRow({ }) {
GridCol({ span: { xs: 4, lg: 1 } }) { ForEco(){
金刚区布局} }
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

创新驱动数字经济发展,融云获评「2023 数字经济隐形独角兽」

近期,由北京市大兴区经济和信息化局、北京大兴经济开发区管理委员会、北京隐形独角兽信息科技院联合主办的“2023 数字经济独角兽大会”在北京成功举行。关注【融云 RongCloud】,了解协同办公平台更多干货。 作为专注耕耘通信赛道、掌握关键核心技术、具…

LDO线性稳压器与开关电源的原理

线性稳压器LDO典型代表:LM7805 ,AMS1117,还有一下性能比较好的LDO: 开关稳压器典型代表:LM2596,MP1584,TPS5430,MP2315S LDO靠发热分散能量,纹波较小一般在30mv以下;DCDC通过开关开断…

最新国内使用GPT4教程,GPT语音对话使用,Midjourney绘画,ChatFile文档对话总结+DALL-E3文生图

一、前言 ChatGPT3.5、GPT4.0、GPT语音对话、Midjourney绘画,文档对话总结DALL-E3文生图,相信对大家应该不感到陌生吧?简单来说,GPT-4技术比之前的GPT-3.5相对来说更加智能,会根据用户的要求生成多种内容甚至也可以和…

Ubuntu安装K8S的dashboard(管理页面)

原文网址:Ubuntu安装k8s的dashboard(管理页面)-CSDN博客 简介 本文介绍Ubuntu安装k8s的dashboard(管理页面)的方法。 Dashboard的作用有:便捷操作、监控、分析、概览。 相关网址 官网地址:…

电路设计(8)——计时器的multism仿真

1.功能设计 这是一个计时电路,在秒脉冲的驱动下,计时器开始累加,6个数码管分别显示计时的 时:分:秒。 仿真图如下所示: 左边的运放构成了振荡电路,可以产生脉冲波。这个脉冲波给计时电路提供基准…

0.1+0.2≠0.3,揭秘Python自带的Bug

朋友们,问一个简单的问题:0.10.2? 你肯定会说:中国人不骗中国人,0.10.20.3。 但是在Python里,0.10.2≠0.3 ,我们今天一起来看看这个,并且看一下解决办法。 离奇的错误 在python里…

【日志系列】什么是分布式日志系统?

✔️什么是分布式日志系统? 现在,很多应用都是集群部署的,一次请求会因为负载均衡而被路由到不同的服务器上面,这就导致一个应用的日志会分散在不同的服务器上面。 当我们要向通过日志做数据分析,问题排查的时候&#…

60辆苏州金龙氢能物流车打造长三角绿色运营新范本

近日,在广泰氢能杭州湾运营中心,一辆辆苏州金龙18吨氢能物流车来回穿梭,它们从运营中心出发,将不同类型的汽车零配件从物流园区运往整车制造厂。司机李师傅表示,这条路线他跑了几个月,每天四趟。和他一样&a…

GPT分区格式

GPT分区格式 [rootlocalhost ~]# gdisk /dev/sdb -bash: gdisk: 未找到命令 [rootlocalhost ~]# yum -y install gdisk- gdisk命令用于查看磁盘使用情况和磁盘分区(GPT分区格式) - 命令格式:gdisk [选项...] [设备路径] - 常用选项&…

Flink项目实战篇 基于Flink的城市交通监控平台(下)

系列文章目录 Flink项目实战篇 基于Flink的城市交通监控平台(上) Flink项目实战篇 基于Flink的城市交通监控平台(下) 文章目录 系列文章目录4. 智能实时报警4.1 实时套牌分析4.2 实时危险驾驶分析4.3 出警分析4.4 违法车辆轨迹跟…

redis中根据通配符删除key

redis中根据通配符删除key 我们是不是在redis中keys user:*可以获取所有key,但是 del user:*却不行这里我提供的命令主要是SCANSCAN 0 MATCH user:* COUNT 100使用lua保证原子性 SCAN参数描述 在示例中,COUNT 被设置为 100。这是一个防止一次性获取大…

TiDB 7.1 多租户在中泰证券中的应用

本文详细介绍了中泰证券在系统国产化改造项目中采用 TiDB 多租户技术的实施过程。文章分析了中泰证券数据库系统现状以及引入 TiDB 资源管控技术的必要性,探讨了 TiDB 多租户的关键特性,并阐述了在实际应用中的具体操作步骤。通过该技术的应用&#xff0…

JMeter逻辑控制器之ForEach控制器

1. 背景 前段时间在对某项目进行测试,存在一个需要遍历所有组织机构后给每个组织下新增部门的场景,其实也可以通过在数据库中直接添加数据这种方式来实现,但是有点风险,可能会生成脏数据,后期也不好排查,最…

linux系统 CentOS Tomcat 部署论坛

jdk安装命令:yum -y install java-1.8.0-openjdk-devel.x86_64 结尾上显示下图为成功 检查jdk环境是否配置成功命令:java -version或javac 显示版本 显示信息 mysql安装: 检查是否存mariadb数据库:rpm -qa | grep mariad 卸载ma…

企业计算机服务器中了360后缀勒索病毒如何处理,勒索病毒应对步骤

网络技术的应用与发展,为企业的生产运营提供了有力保障,但也为网络安全威胁埋下隐患。近期,网络上的勒索病毒非常嚣张,严重影响了企业的生产运营。近日,云天数据恢复中心接到很多企业的求助,企业的计算机服…

嵌入式单片机的存储区域与堆和栈

一、单片机存储区域 如图所示位STM32F103ZET6的参数: 单片机的ROM(内部FLASH):512KB,用来存放程序代码的空间。 单片机的RAM:64KB,一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …

HBase 例行灾备方案:快照备份与还原演练

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

秋招复习篇之代码规范

目录 前言 1、变量命名 2、代码空格 1)操作符左右一定有空格, 2)分隔符(, 和;)前一位没有空格,后一位保持空格,例如: 3)大括号和函数保持同一行,并有一个空格…

Python 网络编程之搭建简易服务器和客户端

用Python搭建简易的CS架构并通信 文章目录 用Python搭建简易的CS架构并通信前言一、基本结构二、代码编写1.服务器端2.客户端 三、效果展示总结 前言 本文主要是用Python写一个CS架构的东西,包括服务器和客户端。程序运行后在客户端输入消息,服务器端会…

虹科方案丨L2进阶L3,数据采集如何助力自动驾驶

来源:康谋自动驾驶 虹科方案丨L2进阶L3,数据采集如何助力自动驾驶 原文链接:https://mp.weixin.qq.com/s/qhWy11x_-b5VmBt86r4OdQ 欢迎关注虹科,为您提供最新资讯! 12月14日,宝马集团宣布,搭载…