[鸿蒙开发] 3 - 开始写第一行HarmonyOS代码吧

前言:之前两篇文章主要是学习鸿蒙相关的一些基础理论知识,这篇文章就开始上手敲代码了。通过实例来学习鸿蒙开发,加油!

1.目标

我们今天的目标是将构建一个简单的具有页面跳转/返回功能的应用,如下图所示:

2.基本概念

UI框架 这个在第一篇文章中有提到过,HarmonyOS提供的UI开发框架为:ArkUI(方舟开发框架),提供了UI开发必需的能力:多种组件、布局计算、动画能力、UI交互、绘制等。

方舟开发框架针对于不同目的和技术背景的开发者提供了两种开发范式:

  • 基于ArkTS的声明式开发范式
  • 兼容JS的类Web开发范式

下面是对比:

开来移动端开发和Web开发同学都能很快上手鸿蒙开发呀。

应用模型 第二篇文章有介绍,鸿蒙提供了两种应用模型:FA、Stage,目前我们就用Stage即可。

3.构建一个简单应用

3.1 了解默认的Hello world页面

我们新创建一个工程,或者使用之前的Hello world工程。在Project窗口,点击"entry > src > main > ets > pages ",打开"Index.ets "文件,可以看到页面由Text组件组成。"Index.ets"文件的示例如下:

less 复制代码
// Index.ets
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
      }
      .width('100%')
    }
    .height('100%')
  }
}

虽然这个代码只是实现了一个很简单的Hello World文本展示,但是如果之前有Flutter或者Web开发的经验,从这个代码中就能挖掘出更多有用的信息:

  • @State关键字:声明了message变量,同时上面也提到ArkUI的UI更新方式是:数据驱动更新,类比下Vue.js、Flutter开发,很熟悉吧
  • Row、Column:和Flutter中的组件同名,功能也是一样的。Row将子组件横向排列,Column将子组件纵向排列。都是前端Flex布局的思想
  • Text:就是用来展示文本内容,并且设置了文字大小和加粗,写起来很简单,跟SwiftUI一样呢,哈哈

3.2 Hello world页面添加按钮

都不用看,按钮肯定是Button()组件了。我们在这个页面上添加一个Button组件:

scss 复制代码
@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        // 添加一个按钮
        Button() {
          Text("Open Page")
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#ff9900')
        .width('80%')
        .height('5%')
      }
      .width('100%')
    }
    .height('100%')
  }
}

从添加Button,对Button布局方式来看,这个跟Web页面的布局思想是一样的。

在编辑窗口右上角的侧边工具栏,点击Previewer,打开预览器,第一个页面效果如下图所示:

3.3 构建第二个页面

右键点击"pages"文件夹,选择New -> ArkTS File,命名为Second,点击Finish,目录如下所示:

然后需要配置这个页面的路由。在entry > src > main > resources > base > profile下,打开main_page.json文件,在src下配置第二个页面的路由"pages/Second",示例如下:

参考第一个页面,在第二个页面也添加Text、Button组件,并设置其样式:

scss 复制代码
// Second.ets
@Entry
@Component
struct Second {
  @State message: string = 'Hi there'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button() {
          Text('Back')
            .fontSize(25)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#ff9900')
        .width('80%')
        .height('5%')
      }
      .width('100%')
    }
    .height('100%')
  }
}

3.4 实现页面跳转

页面之间的导航可以通过页面路由router来实现。页面路由router根据页面url找到目标页面,从而实现跳转。使用页面路由需要导入router模块。

我们现在在第一个Hello World页面中给按钮添加一个onClick事件,然后点击时跳转到第二页:

typescript 复制代码
// 导入页面路由模块
import router from '@ohos.router';

@Entry
@Component
struct Index {
  @State message: string = 'Hello World'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        // 添加一个按钮
        Button() {
          Text("Open Page")
            .fontSize(30)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#ff9900')
        .width('80%')
        .height('5%')
        // 给按钮绑定点击事件
        .onClick(()=>{
          console.log("点击了按钮")

          // 跳转第二个页面
          router.pushUrl({url: 'pages/Second' }).then(()=>{
            console.log("成功跳转了");
          }).catch(error=>{
            console.log("跳转失败");
          })
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

从路由跳转的回调来看,跟Promise是不是一模一样呢!

然后,我们在第二个页面中给按钮也加一个返回到前一个页面的事件:

typescript 复制代码
// Second.ets

import router from '@ohos.router';

@Entry
@Component
struct Second {
  @State message: string = 'Hi there'

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(50)
          .fontWeight(FontWeight.Bold)
        Button() {
          Text('Back')
            .fontSize(25)
            .fontWeight(FontWeight.Bold)
        }
        .type(ButtonType.Capsule)
        .margin({
          top: 20
        })
        .backgroundColor('#ff9900')
        .width('80%')
        .height('5%')
        // 绑定点击事件
        .onClick(()=>{
          // 返回上一页面
          router.back()
        })
      }
      .width('100%')
    }
    .height('100%')
  }
}

现在打开Index.ets文件,点击预览器中的刷新按钮图标进行刷新,就可以在两个页面之间进行跳转了:

然后可以试试在本地模拟器上运行哦。

4.总结

从这个小的示例中,我们可以了解到ArkUI的布局思想跟Web是一样的,如果你有Web开发经验的话,上手鸿蒙的成本是很小的。

相关推荐
沅霖37 分钟前
鸿蒙harmony json转对象(2)
harmonyos
kirk_wang15 小时前
Flutter调用HarmonyOS NEXT原生相机拍摄&相册选择照片视频
flutter·华为·harmonyos
星释18 小时前
鸿蒙Flutter实战:17-无痛上架审核指南
flutter·华为·harmonyos
jikuaidi6yuan20 小时前
鸿蒙操作系统的安全架构
华为·harmonyos·安全架构
HarderCoder1 天前
鸿蒙开发者认证-题库(二)
harmonyos
轻口味1 天前
HarmonyOS Next 最强AI智能辅助编程工具 CodeGenie介绍
人工智能·华为·harmonyos·deveco-studio·harmonyos-next·codegenie
jikuaidi6yuan1 天前
除了基本的事件绑定,鸿蒙的ArkUI
华为·harmonyos
GY-931 天前
Flutter中PlatformView在鸿蒙中的使用
flutter·harmonyos
小鱼仙官1 天前
鸿蒙系统 将工程HarmonyOS变成OpenHarmony
华为·harmonyos
塞尔维亚大汉2 天前
OpenHarmony(鸿蒙南向开发)——Combo解决方案之W800芯片移植案例
操作系统·harmonyos