鸿蒙Next的UI布局常用组件主要包括以下几种:
布局组件
- 线性布局(Row/Column):控制其子元素在线性方向上(水平方向和垂直方向)依次排列。
- 层叠布局(Stack):通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。
- 弹性布局(Flex):提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。
- 相对布局(RelativeContainer):支持容器内部的子元素设置相对位置关系,子元素可以指定兄弟元素或父容器作为锚点,基于锚点做相对位置布局。
- 栅格布局(GridRow/GridCol):一种通用的辅助定位工具,通常用于不同尺寸设备的自动换行和自适应的效果。
- 列表(List):当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。
- 创建网格(Grid/GridItem):具有较强的页面均分能力,子组件占比控制能力。
- 轮播(Swiper):本身是一个容器组件,当设置了多个子组件后,可以对这些子组件进行轮播显示。
- 滚动布局(Scroll):可以设置滚动方向,如水平滚动或垂直滚动。
常用组件
- 按钮(Button):包括胶囊按钮、圆形按钮、普通按钮等类型。
- 单选框(Radio):用于单选操作。
- 切换按钮(Toggle):提供勾选效果以及开关效果,可根据设置的类型进行控制。
- 进度条(Progress):可通过类型设置条状、环状、月牙状等。
- 文本组件(Text/Span):用于展示文本内容。
- 文本输入(TextInput/TextArea):TextInput用于单行文本输入,TextArea用于多行文本输入。
- 自定义弹窗(CustomDialog):可以通过CustomDialogController类显示自定义弹窗。
- 图片(Image):可设置图片缩放类型、重复样式、渲染模式、解码尺寸、设置滤镜等操作。
- Web组件:用于在应用程序中显示本地或网络Web页面内容,为开发者提供页面加载、页面交互、页面调试等能力。
- 标签页(Tabs):提供选项卡功能,可以切换不同的页面或视图。
- 气泡标记(Badge):通常用于显示数字或字符串,作为角标使用。
这些组件和布局方式共同构成了鸿蒙Next丰富的UI开发体系,开发者可以根据实际需求选择合适的组件和布局方式来构建用户界面。
布局组件
线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。
弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。常用于页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等。
RelativeContainer为采用相对布局的容器,支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。
栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。主要优势包括:
提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数,可以方便地对页面元素进行定位和排版。
统一的定位标注:栅格布局可以为系统提供一种统一的定位标注,保证不同设备上各个模块的布局一致性。这可以减少设计和开发的复杂度,提高工作效率。
灵活的间距调整方法:栅格布局可以提供一种灵活的间距调整方法,满足特殊场景布局调整的需求。通过调整列与列之间和行与行之间的间距,可以控制整个页面的排版效果。
自动换行和自适应:栅格布局可以完成一对多布局的自动换行和自适应。当页面元素的数量超出了一行或一列的容量时,他们会自动换到下一行或下一列,并且在不同的设备上自适应排版,使得页面布局更加灵活和适应性强。
媒体查询作为响应式设计的核心,在移动设备上应用十分广泛。媒体查询可根据不同设备类型或同设备不同状态修改应用的样式。媒体查询常用于下面两种场景:
针对设备和应用的属性信息(比如显示区域、深浅色、分辨率),设计出相匹配的布局。
当屏幕发生动态改变时(比如分屏、横竖屏切换),同步更新应用的页面布局。
列表可以轻松高效地显示结构化、可滚动的信息。通过在List组件中按垂直或者水平方向线性排列子组件ListItemGroup或ListItem,为列表中的行或列提供单个视图,或使用循环渲染迭代一组行或列,或混合任意数量的单个视图和ForEach结构,构建一个列表。List组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。
ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。Grid组件支持使用条件渲染、循环渲染、懒加载等方式生成子组件。
Swiper作为一个容器组件,如果设置了自身尺寸属性,则在轮播显示过程中均以该尺寸生效。如果自身尺寸属性未被设置,则分两种情况:如果设置了prevMargin或者nextMargin属性,则Swiper自身尺寸会跟随其父组件;如果未设置prevMargin或者nextMargin属性,则会自动根据子组件的大小设置自身的尺寸。
常用组件