【 HarmonyOS 5 入門系列 】鴻蒙HarmonyOS示例項目講解
##鴻蒙開發能力 ##HarmonyOS SDK應用服務##鴻蒙金融類應用 (金融理財#
一、前言:移動開發聲明式 UI 框架的技術變革
在移動操作系統的發展歷程中,UI 開發模式經歷了從命令式到聲明式的重大變革。
根據華為開發者聯盟 2024 年數據報告顯示,HarmonyOS 設備激活量已突破 7.3 億臺,其中采用 ArkTS 聲明式 UI 框架開發的應用占比達 68%,較 2023 年提升 45 個百分點。
這標志著以 ArkTS 為代表的聲明式開發范式,正在成為智能終端應用開發的主流選擇。
本文將以一個典型的 ArkTS 組件代碼為例(代碼示例來自IDE示例)。
該代碼實現了一個基礎的交互界面,包含狀態管理、布局設計、事件處理等核心要素,是理解 ArkTS 組件開發的絕佳切入點。
二、ArkTS 組件基礎:代碼結構與核心裝飾器
(1)項目結構梳理
圖(1-1)
如上圖所示,該項目整體結構為HarmonyOS示例空Ability項目結構。一個常規的鴻蒙應用項目,重點需要關心編碼的部分,分為三個:
- AppScope 設置應用的包名,圖標等相關信息
- entry - src - main - ets 只要編碼的所在地。entryAbility作為啟動初始的入口,需要修改其中的啟動頁。pages為UI界面和邏輯開發。
- resource 資源目錄下的圖標目錄 media,頁面配置路由main_pages
(2)ArkTS組件聲明與入口標記
@Entry
@Component
struct Index {
// 組件內部邏輯
}
1. @Entry 裝飾器:
標記應用的Ability啟動加載的入門,我們可以理解為界面。所以該裝飾器修飾,都可以在Ability中加載,作為界面使用。
2. 下面為EntryAbility代碼示例,配置啟動頁:
import { AbilityConstant, ConfigurationConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { window } from '@kit.ArkUI';
const DOMAIN = 0x0000;
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET);
}
onWindowStageCreate(windowStage: window.WindowStage): void {
// 舞臺添加啟動頁面
windowStage.loadContent('pages/Index', (err) = > {
if (err.code) {
hilog.error(DOMAIN, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err));
return;
}
hilog.info(DOMAIN, 'testTag', 'Succeeded in loading the content.');
});
}
}
3. 下面為路由配置表resource - base - profile - main_pages.json文件:
{
"src": [
"pages/Index"
]
}
當我們使用快捷鍵,創建空的pages時,IDE會自動在該路由表添加信息。若是手動,一定要記得添加頁面的信息。
4. @Component 裝飾器: 代表該類是組建類,可以給其他界面和組件調用,例如:
// 這里引入
import { Index } from './Index'
@Entry
@Component
struct APage {
build() {
RelativeContainer() {
// 這里使用
Index()
}
.height('100%')
.width('100%')
}
}
5. export導出
但是需要注意的是,我們需要對要引入的組件類,進行export導出標記,其他類才能去導出。所以我們的Index類需要作如下修改:
@Entry
@Component
export struct Index {
// 組件內部邏輯
}
(3)build函數是做什么的呢?
1. build函數構建概述
組件構建函數,定義UI結構和布局,從示例代碼可以看出,build中進行了魚鱗排版布局的編寫。這也是聲明式UI布局編寫的一大特寫,不管是Flutter還是Android的compose,都是如此。
布局通過嵌入-展開的形式,可以一目了然整個UI布局的結構。并且通過鏈式調用,非常方便的設置UI屬性。
@Entry // 應用入口組件標識
@Component // 聲明為組件
export struct Index {
// 組件構建函數,定義UI結構和布局
build() {
// 創建一個相對容器,占滿整個父容器空間
RelativeContainer() {
// 顯示message狀態變量的文本組件
Text(this.message)
.id('HelloWorld') // 設置組件ID,用于樣式或交互引用
.fontSize($r('app.float.page_text_font_size')) // 從資源文件獲取字體大小
.fontWeight(FontWeight.Bold) // 設置字體加粗
.alignRules({ // 設置文本在容器中的對齊規則
center: { anchor: '__container__', align: VerticalAlign.Center }, // 垂直居中
middle: { anchor: '__container__', align: HorizontalAlign.Center } // 水平居中
})
}
.height('100%') // 容器高度占滿父容器
.width('100%') // 容器寬度占滿父容器
}
}
2.RelativeContainer 的定位策略
HarmonyOS 提供 7 種基礎布局容器,RelativeContainer(相對布局)適用于元素需相對于容器或其他元素定位的場景。
根據華為 UX 設計規范,在屏幕適配場景中,相對布局的設備兼容性比絕對布局高 40%,尤其適合折疊屏等多形態設備。
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
錨點系統:
__container__表示相對于父容器定位,支持自定義錨點(如子組件 ID)。華為布局引擎數據顯示,合理使用錨點可減少 20% 的布局計算時間,避免遞歸定位導致的性能瓶頸。?
對齊策略:
VerticalAlign.Center(垂直居中)與 HorizontalAlign.Center(水平居中)組合使用,實現文本組件的屏幕中心定位。該策略在不同分辨率設備上的定位誤差小于 1px(基于 1920x1080 到 4K 分辨率的測試數據)。
(4)數據交互與事件交互
1. 響應式狀態管理:@State 裝飾器
@State message: string = 'Hello World';
@State 修飾的變量會被框架自動追蹤,當變量值發生變化時,系統會智能識別受影響的 UI 元素并觸發局部重繪。與傳統命令式 UI 更新(如 Android 的 findViewById+setText)相比,聲明式更新減少了 60% 的 DOM 操作量(基于 Chromium 內核性能測試數據)。
2. 綁定點擊事件:
通過在點擊事件中,處理message變量的賦值。ArkUI框架自動處理數值變化后,使用了該數值的UI進行重新渲染刷新。
.onClick(() = > {
this.message = 'Welcome';
})
// 顯示message狀態變量的文本組件
Text(this.message)
(5)資源文件的管理
.fontSize($r('app.float.page_text_font_size'))
$r () 函數:
從資源文件(resources/base/element/string.json 等)動態獲取字體大小,支持多語言、多設備適配。華為開發者平臺數據顯示,使用資源文件管理樣式可使應用包體積減少 15%,避免硬編碼導致的維護成本。?
類型安全:
DevEco Studio 提供資源引用智能提示,減少 70% 的資源路徑拼寫錯誤(基于千次開發測試數據)。
三、示例項目源碼與詳細注釋
Index.page
@Entry // 應用入口組件標識
@Component // 聲明為組件
export struct Index {
// 響應式狀態變量,用于存儲顯示的文本內容
@State message: string = 'Hello World';
// 組件構建函數,定義UI結構和布局
build() {
// 創建一個相對容器,占滿整個父容器空間
RelativeContainer() {
// 顯示message狀態變量的文本組件
Text(this.message)
.id('HelloWorld') // 設置組件ID,用于樣式或交互引用
.fontSize($r('app.float.page_text_font_size')) // 從資源文件獲取字體大小
.fontWeight(FontWeight.Bold) // 設置字體加粗
.alignRules({ // 設置文本在容器中的對齊規則
center: { anchor: '__container__', align: VerticalAlign.Center }, // 垂直居中
middle: { anchor: '__container__', align: HorizontalAlign.Center } // 水平居中
})
.onClick(() = > { // 點擊事件處理
this.message = 'Welcome'; // 點擊后更新狀態變量,觸發UI刷新
})
}
.height('100%') // 容器高度占滿父容器
.width('100%') // 容器寬度占滿父容器
}
}
APage.ets
import { Index } from './Index'
@Entry
@Component
struct APage {
build() {
RelativeContainer() {
Index()
}
.height('100%')
.width('100%')
}
}
審核編輯 黃宇
-
鴻蒙
+關注
關注
59文章
2594瀏覽量
43961 -
HarmonyOS
+關注
關注
80文章
2117瀏覽量
32751
發布評論請先 登錄
免費學習鴻蒙(HarmonyOS)開發,一些地址分享
2024款鴻蒙OS 最新HarmonyOS Next_HarmonyOS4.0系列教程分享
HarmonyOS 應用開發賦能套件:鴻蒙原生應用開發的 “神助攻”
【HarmonyOS HiSpark Wi-Fi IoT HarmonyOS 智能家居套件試用 】鴻蒙系統無人機控制系統
【每日精選】鴻蒙大咖HarmonyOS開發資料合集
【HarmonyOS HiSpark AI Camera】鴻蒙系統上的目標檢測項目
HarmonyOS學習系列文章匯總
HarmonyOS資料下載專題

評論