引入:從空白畫布到交互體驗

在前兩篇中,我們搭建好了開發環境並瞭解了工程結構。現在讓我們真正動手創建第一個HarmonyOS應用,體驗從空白工程到具備交互功能的完整開發流程。這個經典的"Hello World"應用將帶你感受HarmonyOS應用開發的基本範式,為後續複雜功能打下堅實基礎。

通過本篇學習,你將掌握如何創建一個完整的應用,理解核心代碼的作用,並實現基本的頁面交互功能。

講解:從零構建交互式應用

創建新工程與模板選擇

首先在DevEco Studio中創建新工程,選擇"Empty Ability"模板,這個模板提供了最基礎的項目結構,適合初學者入門。

關鍵配置步驟:

  • 工程類型:選擇Application(應用開發)
  • 模板:Empty Ability
  • Compile SDK:建議選擇6.0.1(21)或更高版本
  • 語言:ArkTS(默認選擇)

工程創建完成後,DevEco Studio會自動生成基礎代碼和資源文件,這是HarmonyOS應用的起點。

理解自動生成的代碼結構

查看entry/src/main/ets/pages/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%')
  }
}

代碼解析:

  • @Entry:裝飾器,標識這是頁面的入口組件
  • @Component:裝飾器,表示這是一個自定義組件
  • @State:裝飾器,使message變量具備響應式特性
  • build()方法:描述UI佈局的結構和樣式

添加交互功能:按鈕與事件

讓我們為應用添加交互功能,實現點擊按鈕改變文本內容:

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

  build() {
    Row() {
      Column() {
        Text(this.message)
          .fontSize(30)
          .fontWeight(FontWeight.Bold)
          .margin({ bottom: 20 })
        
        Text(`點擊次數: ${this.count}`)
          .fontSize(20)
          .fontColor('#666')
          .margin({ bottom: 30 })
        
        Button('點擊我') {
          Text('改變文本')
            .fontSize(18)
            .fontWeight(FontWeight.Medium)
        }
        .type(ButtonType.Capsule)
        .backgroundColor('#007DFF')
        .padding({ left: 20, right: 20 })
        .onClick(() => {
          this.count++
          this.message = `Hello HarmonyOS! 點擊: ${this.count}`
        })
      }
      .width('100%')
    }
    .height('100%')
    .padding(20)
  }
}

交互邏輯説明:

  • Button組件:創建可點擊的按鈕
  • onClick事件:定義按鈕點擊時的響應邏輯
  • 狀態更新:通過修改@State變量觸發UI自動更新

頁面路由與多頁面導航

實際應用通常包含多個頁面,讓我們創建第二個頁面並實現頁面間跳轉。

1. 創建第二個頁面

在pages文件夾下新建Second.ets文件:

@Entry
@Component
struct Second {
  @State message: string = '這是第二個頁面'

  build() {
    Column() {
      Text(this.message)
        .fontSize(30)
        .fontWeight(FontWeight.Bold)
        .margin({ bottom: 40 })
      
      Button('返回首頁') {
        Text('返回')
          .fontSize(18)
      }
      .type(ButtonType.Capsule)
      .backgroundColor('#FF6A00')
      .onClick(() => {
        // 返回上一個頁面
        router.back()
      })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
  }
}

2. 配置頁面路由

resources/base/profile/main_pages.json中添加路由配置:

{
  "src": [
    "pages/Index",
    "pages/Second"
  ]
}

3. 實現頁面跳轉

在首頁添加跳轉邏輯:

import { BusinessError } from '@kit.BasicServicesKit';

// 在按鈕的onClick事件中添加
.onClick(() => {
  let uiContext: UIContext = this.getUIContext();
  let router = uiContext.getRouter();
  
  router.pushUrl({ url: 'pages/Second' }).then(() => {
    console.info('跳轉到第二個頁面成功')
  }).catch((err: BusinessError) => {
    console.error(`跳轉失敗: ${err.code}, ${err.message}`)
  })
})

應用配置與元數據

每個HarmonyOS應用都需要正確的配置信息。打開AppScope/app.json5文件:

{
  "app": {
    "bundleName": "com.example.myapplication",
    "vendor": "example",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "minAPIVersion": 12,
    "targetAPIVersion": 12
  }
}

配置項説明:

  • bundleName:應用唯一標識
  • versionCode:內部版本號
  • versionName:用户可見的版本號
  • minAPIVersion:兼容的最低API版本

使用預覽器實時調試

DevEco Studio的預覽器功能讓開發更加高效:

  1. 打開預覽器:點擊編輯窗口右上角的Previewer圖標
  2. 實時預覽:修改代碼後預覽器會自動更新
  3. 多設備預覽:支持同時預覽不同設備尺寸的效果

總結:第一個應用的完整開發流程

通過本篇實踐,我們完成了HarmonyOS應用開發的完整入門流程:

核心技能掌握

工程創建:熟悉了項目創建和模板選擇

UI開發:掌握了基礎組件的使用和佈局方法

交互實現:學會了事件處理和狀態管理

多頁面導航:理解了頁面路由和跳轉機制

實時調試:運用預覽器提高開發效率

開發要點回顧

  1. 聲明式UI:HarmonyOS採用聲明式編程範式,通過描述UI應該是什麼樣子而不是如何一步步構建
  2. 響應式更新:使用@State裝飾器實現數據變化時的自動UI更新
  3. 組件化思維:每個頁面都是獨立的組件,支持複用和組合
  4. 配置驅動:通過配置文件管理應用元數據和路由信息

下一步學習建議

在掌握了基礎應用創建後,下一篇我們將深入解析HarmonyOS的Stage模型,這是理解應用架構和生命週期管理的關鍵。建議在繼續學習前,嘗試以下擴展練習:

  • 修改頁面樣式,更換顏色和佈局
  • 添加更多交互元素,如輸入框、滑動條等
  • 嘗試創建第三個頁面,實現更復雜的導航流程

實踐出真知:通過親手編寫和修改代碼,你會更深刻地理解各個概念的作用和相互關係,為後續的高級功能開發奠定堅實基礎。