当前位置: 首页 > news >正文

HarmonyOS应用开发——线性布局

        在 HarmonyOS 应用开发的世界里,界面布局如同搭建高楼大厦的框架,决定着用户与应用交互的第一印象和使用体验。合理的布局不仅能让界面元素整齐有序、美观协调,还能适应不同设备的屏幕尺寸和分辨率。本文将深入剖析 HarmonyOS 中的常见布局方式,帮助开发者打造出出色的应用界面。

 前置条件

        在开始本文章内容之前,博主希望开发者已完成 HarmonyOS 开发环境 的搭建。详情请参考:HarmonyOS 开发环境搭建

线性布局(DirectionalLayout) 

应用场景:

  • 如果布局内子元素超过1个时,且能够以某种方式线性排列时优先考虑此布局。

         线性布局(LinearLayout)是开发中最常用的布局,通过线性容器 Row 和 Column 构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。

        线性布局 的排列方向由所选容器组件决定,Row容器内子元素按照水平方向排列,Column容器内子元素按照垂直方向排列。

        根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。

@Entry
@Component
struct Index {build() {RelativeContainer() {// 线性布局 [Column 为垂直线性容器]Column({ space: 20 }) {// 线性布局 [Row 为水平线性容器]Row({ space: 35 }) {Text('space: 35').fontSize(15).fontColor(Color.Gray)Text('space: 35').fontSize(15).fontColor(Color.Gray)Text('space: 35').fontSize(15).fontColor(Color.Gray)}.width('90%').height(50).backgroundColor(0xF5DEB3)Row({ space: 35 }) {Text('space: 35').fontSize(15).fontColor(Color.Gray)Text('space: 35').fontSize(15).fontColor(Color.Gray)Text('space: 35').fontSize(15).fontColor(Color.Gray)}.width('90%').height(50).backgroundColor(0xF5DEB3)}.width('100%').height('120px').justifyContent(FlexAlign.Start)}.height('100%').width('100%')}
}

布局子元素在主轴上的排列方式

参数说明
space在布局容器内,可以通过space属性设置排列方向上子元素的间距,使各子元素在排列方向上有等间距效果。
justifyContent在布局容器内,可以通过justifyContent属性设置子元素在容器主轴上的排列方式。可以从主轴起始位置开始排布,也可以从主轴结束位置开始排布,或者均匀分割主轴的空间。

Column容器内子元素在垂直方向上的排列

属性说明
FlexAlign.Start元素在 垂直方向 首端对齐,第一个元素与行首对齐,同时后续的元素与前一个对齐。
FlexAlign.Center元素在 垂直方向 中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。
FlexAlign.End元素在 垂直方向 尾部对齐,最后一个元素与行尾对齐,其他元素与后一个对齐。
FlexAlign.SpaceBetween垂直方向 均匀分配元素,相邻元素之间距离相同。第一个元素与行首对齐,最后一个元素与行尾对齐。
FlexAlign.SpaceAround垂直方向 均匀分配元素,相邻元素之间距离相同。第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半。
FlexAlign.SpaceEvenly垂直方向 均匀分配元素,相邻元素之间的距离、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样。

Row容器内子元素在水平方向上的排列

属性说明
FlexAlign.Start元素在 水平方向 首端对齐,第一个元素与行首对齐,同时后续的元素与前一个对齐。
FlexAlign.Center元素在 水平方向 中心对齐,第一个元素与行首的距离与最后一个元素与行尾距离相同。
FlexAlign.End元素在 水平方向 尾部对齐,最后一个元素与行尾对齐,其他元素与后一个对齐。
FlexAlign.SpaceBetween水平方向 均匀分配元素,相邻元素之间距离相同。第一个元素与行首对齐,最后一个元素与行尾对齐。
FlexAlign.SpaceAround水平方向 均匀分配元素,相邻元素之间距离相同。第一个元素到行首的距离和最后一个元素到行尾的距离是相邻元素之间距离的一半。
FlexAlign.SpaceEvenly水平方向 均匀分配元素,相邻元素之间的距离、第一个元素与行首的间距、最后一个元素到行尾的间距都完全一样。

布局子元素在交叉轴上的对齐方式

参数说明
alignItems在布局容器内,可以通过alignItems属性设置子元素在交叉轴(排列方向的垂直方向)上的对齐方式,且在各类尺寸屏幕中表现一致。其中,交叉轴为垂直方向时,取值为VerticalAlign类型,水平方向取值为HorizontalAlign类型。

    Column容器内子元素在水平方向上的排列

    参数说明
    HorizontalAlign.Start子元素在水平方向左对齐。
    HorizontalAlign.Center子元素在水平方向居中对齐。
    HorizontalAlign.End子元素在水平方向右对齐。

    Row容器内子元素在垂直方向上的排列

    参数说明
    VerticalAlign.Top子元素在垂直方向顶部对齐。
    VerticalAlign.Center子元素在垂直方向居中对齐。
    VerticalAlign.Bottom子元素在垂直方向底部对齐。

    自适应拉伸

            在线性布局下,常用空白填充组件Blank,在容器主轴方向自动填充空白空间,达到自适应拉伸效果。Row 和 Column 作为容器,只需要添加宽高为百分比,当屏幕宽高发生变化时,会产生自适应效果。

    @Entry
    @Component
    struct BlankExample {build() {Column() {Row() {Text('Bluetooth').fontSize(18)Blank()Toggle({ type: ToggleType.Switch, isOn: true })}.backgroundColor(0xFFFFFF).borderRadius(15).padding({ left: 12 }).width('100%')}.backgroundColor(0xEFEFEF).padding(20).width('100%')}
    }

    自适应缩放

            自适应缩放是指子元素随容器尺寸的变化而按照预设的比例自动调整尺寸,适应各种不同大小的设备。在线性布局中,可以使用以下两种方法实现自适应缩放。

    • 父容器尺寸确定时,使用layoutWeight属性设置子元素和兄弟元素在主轴上的权重,忽略元素本身尺寸设置,使它们在任意尺寸的设备下自适应占满剩余空间。
    • 父容器尺寸确定时,使用百分比设置子元素和兄弟元素的宽度,使他们在任意尺寸的设备下保持固定的自适应占比。

    自适应延伸

            自适应延伸是指在不同尺寸设备下,当页面的内容超出屏幕大小而无法完全显示时,可以通过滚动条进行拖动展示。对于线性布局,这种方法适用于容器中内容无法一屏展示的场景。通常有以下两种实现方式。

    • 在List中添加滚动条:当List子项过多一屏放不下时,可以将每一项子元素放置在不同的组件中,通过滚动条进行拖动展示。可以通过scrollBar属性设置滚动条的常驻状态,edgeEffect属性设置拖动到内容最末端的回弹效果。

    • 使用Scroll组件:在线性布局中,开发者可以进行垂直方向或者水平方向的布局。当一屏无法完全显示时,可以在Column或Row组件的外层包裹一个可滚动的容器组件Scroll来实现可滑动的线性布局。

    垂直方向布局中使用Scroll组件:

    @Entry
    @Component
    struct ScrollExample {scroller: Scroller = new Scroller();private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];build() {Scroll(this.scroller) {Column() {ForEach(this.arr, (item?:number|undefined) => {if(item){Text(item.toString()).width('90%').height(150).backgroundColor(0xFFFFFF).borderRadius(15).fontSize(16).textAlign(TextAlign.Center).margin({ top: 10 })}}, (item:number) => item.toString())}.width('100%')}.backgroundColor(0xDCDCDC).scrollable(ScrollDirection.Vertical) // 滚动方向为垂直方向.scrollBar(BarState.On) // 滚动条常驻显示.scrollBarColor(Color.Gray) // 滚动条颜色.scrollBarWidth(10) // 滚动条宽度.edgeEffect(EdgeEffect.Spring) // 滚动到边沿后回弹}
    }

    水平方向布局中使用Scroll组件: 

    @Entry
    @Component
    struct ScrollExample {scroller: Scroller = new Scroller();private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];build() {Scroll(this.scroller) {Row() {ForEach(this.arr, (item?:number|undefined) => {if(item){Text(item.toString()).height('90%').width(150).backgroundColor(0xFFFFFF).borderRadius(15).fontSize(16).textAlign(TextAlign.Center).margin({ left: 10 })}})}.height('100%')}.backgroundColor(0xDCDCDC).scrollable(ScrollDirection.Horizontal) // 滚动方向为水平方向.scrollBar(BarState.On) // 滚动条常驻显示.scrollBarColor(Color.Gray) // 滚动条颜色.scrollBarWidth(10) // 滚动条宽度.edgeEffect(EdgeEffect.Spring) // 滚动到边沿后回弹}
    }

            以上详细介绍了 HarmonyOS 的线性布局在实战中的使用方式。若你在实际开发中遇到问题,或想了解某类布局的更多进阶用法,欢迎随时和我交流。

    相关文章:

  • MongoDB详细安装步骤(Windows 系统)
  • 安卓开发常用框架与库详解
  • 在职申硕|中南财院校专业直选
  • Java性能问题排查
  • 上传视频报错 413 Request Entity Too Large
  • 【动手学深度学习】3.5. 图像分类数据集
  • Python 高级主题与性能优化指南
  • 体系结构论文(八十六):The Dark Side ofComputing: SilentData Corruptions
  • C++ —— STL容器 —— string的模拟实现
  • 北京大学:AI+Agent与Agentic+AI的原理与应用(适合科研从业者和技术爱好者阅读)
  • 功能测试—软件的生命周期
  • 单 exe 截图软件:ScreenCapture 2.3.1 发布
  • 包含各种扁平化UI套件的psd适用于博客电商类移动端网站项目
  • 搭建前端项目 Vue+element UI引入 步骤 (超详细)
  • Linux 系统设置时区
  • Flask应用中处理异步事件(后台线程+事件循环)的方法(2)
  • 一个完整的LSTM风光发电预测与并网优化方案,包含数据处理、模型构建、训练优化、预测应用及系统集成实现细节
  • 2025软件测试面试题汇总(接口测试篇)
  • Kubernetes安全机制深度解析(四):动态准入控制和Webhook
  • 成都鼎讯短波通信信号模拟设备:短波频段的电磁模拟王者​
  • 做网站的公司如何推广/国内企业网站模板
  • wordpress响应式cms/惠州seo收费
  • 做网站商城需要什么软件/谷歌优化怎么做
  • 国家开放大学网站的作业怎么做/湖南网站建设推广优化
  • 网站正在建设中 给你带来/东莞网络营销网站建设
  • 关于桥梁建设工程设公司网站/百度seo快速排名优化服务