马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
一次开发,多端部署
HarmonyOS ArkUI中提供了两种布局能力解决上面的两个问题: - 自适应布局:当外部容器大小发生变化时,页面元素可以根据相对关系自动变化以适应外部容器变化的布局能力,比如聊天页中,大屏会话列表和聊天页通知展示,小屏幕分开展示。相对关系比如有占比、固定宽高比、显示优先级等。ArkTS自适应布局能力有7种:拉伸能力、均分能力、占比能力、缩放能力、延伸能力、隐藏能力、折行能力。自适应布局能力可以实现界面显示随外部容器大小连续变化。
- 响应式布局: 当外部容器大小发生变化时,元素可以根据断点、栅格或特定的特征(如屏幕方向、窗口宽高等)自动变化以适应外部容器变化的布局能力。ArkTS响应式布局能力有3种:断点、媒体查询、栅格布局。响应式布局可以实现界面随外部容器大小不连续变化,通常不同特征下的界面显示会有较大的差异。
1.1 自适应布局
ArkUI提炼了七种自适应布局能力: - 拉伸能力:容器组件尺寸发生变化时,增加或减小的空间全部分配给容器组件内指定区域。通过Flex布局的flexGrow和flexShrink属性来提供这种能力。
- 均分能力:容器组件尺寸发生变化时,增加或减小的空间均匀分配给容器组件内所有空白区域。通过给Row组件、Column组件或Flex组件的justifyContent属性设置为FlexAlign.SpaceEvenly实现这种能力,比如首页的TAB一般是均分。
- 占比能力:子组件的宽或高按照预设的比例,随容器组件发生变化。 基于通用属性的两种实现方式:将子组件的宽高设置为父组件宽高的百分比、layoutWeight属性
- 缩放功能:子组件的宽高按照预设的比例,随容器组件发生变化,且变化过程中子组件的宽高比不变。通过布局约束的aspectRatio属性实现。
- 延伸能力:容器组件内的子组件,按照其在列表中的先后顺序,随容器组件尺寸变化显示或隐藏。基于容器组件的两种实现方式:通过List组件实现、通过Scroll组件配合Row组件或Column组件实现
- 隐藏能力:容器组件内的子组件,按照其预设的显示优先级,随容器组件尺寸变化显示或隐藏。相同显示优先级的子组件同时显示或隐藏。通过布局约束的displayPriority属性实现。
- 折行能力:容器组件尺寸发生变化时,如果布局方向尺寸不足以显示完整内容,自动换行。通过Flex组件的wrap属性设置为FlexWrap.Wrap实现。
1.2 响应式布局
自适应布局可以保证窗口尺寸在一定范围内变化时,页面的显示是正常的。但是将窗口尺寸变化较大时(如折叠屏手机窗口宽度从400vp变化为1000vp),仅仅依靠自适应布局可能出现图片异常放大或页面内容稀疏、留白过多等问题(比如feed流,小屏幕一般显示两列,但是在大屏幕中显示两列太稀疏,要显示四列才满足美感),此时就需要借助响应式布局能力调整页面结构。 响应式布局是指页面内的元素可以根据特定的特征(如窗口宽度、屏幕方向等)自动变化以适应外部容器变化的布局能力。响应式布局中最常使用的特征是窗口宽度,可以将窗口宽度划分为不同的范围(AkrUI中称为断点)。当窗口宽度从一个断点变化到另一个断点时,改变页面布局(如将页面内容从单列排布调整为双列排布甚至三列排布等)以获得更好的显示效果。 当前系统提供了如下三种响应式布局能力: - 断点:将窗口宽度划分为不同的范围(即断点),监听窗口尺寸变化,当断点改变时同步调整页面布局。
- 媒体查询:媒体查询支持监听窗口宽度、横竖屏、深浅色、设备类型等多种媒体特征,当媒体特征发生改变时同步调整页面布局。
- 栅格布局:栅格组件将其所在的区域划分为有规律的多列,通过调整不同断点下的栅格组件的参数以及其子组件占据的列数等,实现不同的布局效果。
|