HarmonyOS鸿蒙学习笔记(22)@Builder实战

这篇具有很好参考价值的文章主要介绍了HarmonyOS鸿蒙学习笔记(22)@Builder实战。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

@Builder标签是一种更轻量的UI元素复用机制,下面通过一个简单的例子来具体说明:
比如如下布局效果:上面是一个轮播的Swiper,下面是一个Grid
HarmonyOS鸿蒙学习笔记(22)@Builder实战,HarmonyOS,harmonyos,Builder
布局代码如下:

build() {
    Navigation() {
      Scroll() {
        Column({ space: CommonConstants.COMMON_SPACE }) {
          //构建Swiper
          Swiper(this.swiperController) {
            ForEach(WindowViewModel.getSwiperImages(), (img: Resource, index?: number) => {
              Image(img).borderRadius($r('app.float.home_swiper_border_radius'))
            }, (img: Resource, index?: number) => index + JSON.stringify(img.id))
          }
          .margin({
            top: $r('app.float.home_swiper_margin')
          }).autoPlay(true)
          //构建Grid
          Grid() {
            ForEach(WindowViewModel.getFirstGridData(), (firstItem: ItemData, index?: number) => {
              GridItem() {
                Column() {
                  Image(firstItem.image)
                    .width($r('app.float.home_home_cell_size'))
                    .height($r('app.float.home_home_cell_size'))
                  Text(firstItem.title)
                    .fontSize($r('app.float.little_text_size'))
                    .margin({ top: $r('app.float.home_home_cell_margin') })
                }
              }
            }, (firstItem: ItemData, index?: number) => index + JSON.stringify(firstItem))
          }
          .columnsTemplate(CommonConstants.GRID_FOUR_COLUMNS)
          .rowsTemplate(CommonConstants.GRID_TWO_ROWS)
          .columnsGap($r('app.float.home_grid_columns_gap'))
          .rowsGap($r('app.float.home_grid_row_gap'))
          .padding({
            top: $r('app.float.home_grid_padding'),
            bottom: $r('app.float.home_grid_padding')
          })
          .height($r('app.float.home_grid_height'))
          .backgroundColor(Color.White)
          .borderRadius($r('app.float.background_border_radius'))
        }
      }
      .scrollBar(BarState.Off)
      .margin({
        left: $r('app.float.home_padding'),
        right: $r('app.float.home_padding')
      })
    }
    .title(this.NavigationTitle())
    .titleMode(NavigationTitleMode.Mini)
    .hideBackButton(true)
    .backgroundColor($r('app.color.background'))
  }

可以发现布局代码臃肿不易读,此时可以通过@Builder来讲上面的代码进行精简:修改后的布局,将上面的SwiperGrid分别使用@Builder组件剥离出两个方法buildSwiper和buildGrid显得更简洁易读:

 @Builder
  buildSwiper(){
    Swiper(this.swiperController) {
      ForEach(WindowViewModel.getSwiperImages(), (img: Resource, index?: number) => {
        Image(img).borderRadius($r('app.float.home_swiper_border_radius'))
      }, (img: Resource, index?: number) => index + JSON.stringify(img.id))
    }
    .margin({
      top: $r('app.float.home_swiper_margin')
    }).autoPlay(true)
  }

  @Builder
  buildGrid(){
    Grid() {
      ForEach(WindowViewModel.getFirstGridData(), (firstItem: ItemData, index?: number) => {
        GridItem() {
          Column() {
            Image(firstItem.image)
              .width($r('app.float.home_home_cell_size'))
              .height($r('app.float.home_home_cell_size'))
            Text(firstItem.title)
              .fontSize($r('app.float.little_text_size'))
              .margin({ top: $r('app.float.home_home_cell_margin') })
          }
        }
      }, (firstItem: ItemData, index?: number) => index + JSON.stringify(firstItem))
    }
    .columnsTemplate(CommonConstants.GRID_FOUR_COLUMNS)
    .rowsTemplate(CommonConstants.GRID_TWO_ROWS)
    .columnsGap($r('app.float.home_grid_columns_gap'))
    .rowsGap($r('app.float.home_grid_row_gap'))
    .padding({
      top: $r('app.float.home_grid_padding'),
      bottom: $r('app.float.home_grid_padding')
    })
    .height($r('app.float.home_grid_height'))
    .backgroundColor(Color.White)
    .borderRadius($r('app.float.background_border_radius'))
  }
  build() {
    Navigation() {
      Scroll() {
        Column({ space: CommonConstants.COMMON_SPACE }) {
          this.buildSwiper()
          this.buildGrid()
        }
      }
      .scrollBar(BarState.Off)
      .margin({
        left: $r('app.float.home_padding'),
        right: $r('app.float.home_padding')
      })
    }
    .title(this.NavigationTitle())
    .titleMode(NavigationTitleMode.Mini)
    .hideBackButton(true)
    .backgroundColor($r('app.color.background'))
  }

HarmonyOS鸿蒙学习笔记(22)@Builder实战,HarmonyOS,harmonyos,Builder

这里只是简单的介绍了其初级用法,更多复杂的用法参考官方文档

参考资料:
@Builder装饰器:自定义构建函数
源代码地址文章来源地址https://www.toymoban.com/news/detail-821702.html

到了这里,关于HarmonyOS鸿蒙学习笔记(22)@Builder实战的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 鸿蒙HarmonyOS开发实战—多媒体开发(音频开发 一)

    鸿蒙HarmonyOS开发实战—多媒体开发(音频开发 一)

    HarmonyOS音频模块支持音频业务的开发,提供音频相关的功能,主要包括音频播放、音频采集、音量管理和短音播放等。 基本概念 采样 采样是指将连续时域上的模拟信号按照一定的时间间隔采样,获取到离散时域上离散信号的过程。 采样率 采样率为每秒从连续信号中提取并

    2024年01月24日
    浏览(16)
  • 鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)

    鸿蒙HarmonyOS实战-Stage模型(应用上下文Context)

    应用上下文(Context)是应用程序的全局信息的接口。它是一个抽象类,提供了访问应用程序环境的方法和资源的方法。应用上下文可以用于获取应用程序的资源、启动Activity、发送广播等。每个应用程序都有一个应用上下文对象,它在整个应用程序的生命周期内都是唯一的。

    2024年02月20日
    浏览(11)
  • 『牛角书』HarmonyOS鸿蒙实战 开发一个简单聊天助手APP

    『牛角书』HarmonyOS鸿蒙实战 开发一个简单聊天助手APP

    我是通过b站上面老师的讲解,跟着老师编写了一个简单聊天助手app,简答实用,对于刚开始接触鸿蒙的我们来说很有帮助。 所用软件为DevEco Studio,点击Create HarmonyOS Project,这里选择了第一个空的项目,点击next会跳至下一个页面。 这里是项目的名称,因为是一个demo,就没有

    2024年02月12日
    浏览(8)
  • 鸿蒙学习:初探HarmonyOS前端开发

    随着鸿蒙操作系统(HarmonyOS)的推出,前端开发者们迫切希望了解如何在这个全新的操作系统上进行应用程序的开发。本文将带您深入了解HarmonyOS前端开发的基础知识和相关源代码示例。 HarmonyOS是华为推出的一款基于微内核的分布式操作系统,旨在为各种设备提供统一的开发

    2024年01月21日
    浏览(15)
  • 鸿蒙HarmonyOS4.0开发应用从入门到实战 安装DevEcoStudio

    鸿蒙HarmonyOS4.0开发应用从入门到实战 安装DevEcoStudio

    安装包下载地址: 可以根据自己的操作系统选择对应版本下载。 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 下载好后,打开安装包,进入安装界面: 点击Next,进入安装目录选择页面(不要出现中文或特殊字符),可以走默认路径: 点击Next,进入安装选项页面,按照如

    2024年02月04日
    浏览(39)
  • 鸿蒙HarmonyOS学习手册_入门篇

    鸿蒙HarmonyOS学习手册_入门篇

    快速入门 开发准备 本文档适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用(如下图所示),快速了解工程目录的主要文件,熟悉HarmonyOS应用开发流程。 在开始之前,您需要了解有关HarmonyOS应用的一些基本概念:UI框架的简单说明、应用模

    2024年01月25日
    浏览(22)
  • HarmonyOS鸿蒙学习基础篇 - ArkTs介绍

    HarmonyOS鸿蒙学习基础篇 - ArkTs介绍

    概述     ArkTS 是 Harmenyos优选的主力应用开发语言,它是一种基于TypeScript(简称TS)的应用开发语言,由华为开发。它在保持TS基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,ArkTS提供了声明式UI、状态管理等相应的能力,让开发者可以

    2024年01月22日
    浏览(8)
  • HarmonyOS鸿蒙学习基础篇 - 基本语法概述

    HarmonyOS鸿蒙学习基础篇 - 基本语法概述

    书接上文 HarmonyOS鸿蒙学习基础篇 - 运行第一个程序 Hello World 基本语法概述 打开 entrysrcmainetspagesindex.ets 代码如下 代码详细解释如下: 在以上示例中,ArkTS的基本组成如下所示。  装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Comp

    2024年01月24日
    浏览(6)
  • 免费学习鸿蒙(HarmonyOS)开发,一些地址分享

    免费学习鸿蒙(HarmonyOS)开发,一些地址分享

    HarmonyOS万物互联,从华为一系列的操作来看已经与iOS、Android形成三足鼎立之势了。 根据《澎湃新闻》的报道,已有 23所985高校和46所211高校加入了鸿蒙班的行 列,合计达到了 69所 国内一流高校。通过鸿蒙班的设立,高校可以为学生提供专业的鸿蒙OS学习环境和丰富的实践机

    2024年01月16日
    浏览(7)
  • 鸿蒙HarmonyOS实战-ArkUI事件(键鼠事件)_ark ui 点击事件

    鸿蒙HarmonyOS实战-ArkUI事件(键鼠事件)_ark ui 点击事件

    .onMouse((event: MouseEvent) = { event.stopPropagation(); // 在Button的onMouse事件中设置阻止冒泡 this.buttonText = ‘Button onMouse:n’ + ‘’ + \\\'button = ’ + event.button + ‘n’ + \\\'action = ’ + event.action + ‘n’ + ‘x,y = (’ + event.x + ‘,’ + event.y + ‘)’ + ‘n’ + ‘screenXY=(’ + event.screenX + ‘,’ + eve

    2024年04月16日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包