[鸿蒙开发] 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开发经验的话,上手鸿蒙的成本是很小的。

相关推荐
nashane5 小时前
HarmonyOS 6学习:CapsLock键失效诊断与长截图完整实现指南
学习·华为·harmonyos
richard_yuu7 小时前
鸿蒙心理测评模块实战|PHQ-9/GAD7双量表答题、实时计分与结果本地化存储
华为·harmonyos
不爱吃糖的程序媛10 小时前
2026年Electron 鸿蒙PC环境搭建指南
人工智能·华为·harmonyos
nashane10 小时前
HarmonyOS 6学习:长截图功能开发中的滚动拼接与权限处理实战
人工智能·华为·harmonyos
大师兄666811 小时前
从零开发一个 HarmonyOS 输入法——KikaInputMethod 完整拆解
harmonyos·服务卡片·harmonyos6·formkit
Python私教17 小时前
鸿蒙 NEXT 也能接 MCP?用 ArkTS 跑通 AI Agent 工具链
人工智能·华为·harmonyos
Swift社区19 小时前
分布式能力在鸿蒙 PC 上到底怎么用?
分布式·华为·harmonyos
nashane1 天前
HarmonyOS 6学习:外接键盘CapsLock与长截图功能的实战调试与完整解决方案
学习·华为·计算机外设·harmonyos
aqi002 天前
一文理清 HarmonyOS 6.0.2 涵盖的十个升级点
android·华为·harmonyos·鸿蒙·harmony