一、概念
HarmonyOS應用關鍵概念:元服務和App的關系
App具有手動下載安裝、包大小無限制、應用內或應用市場更新、全量功能等特征,可使用全量API
元服務具有免安裝、包大小有限制、即用即走、輕量化等特征,只能使用“元服務API集”
鴻蒙的三大技術理念:一次開發,多端部署;可分可合,自由流轉;統一生態,原生智能
技術理念 | 核心目標 | 技術支撐 | 典型應用場景 |
---|---|---|---|
一次開發,多端部署 | 降低多端開發成本 | 統一開發框架、跨平臺編譯系統 | 一套代碼適配手機、平板、智能手表等 |
可分可合,自由流轉 | 實現跨設備資源與任務動態調度 | 分布式軟總線、任務調度技術 | 視頻/文件在不同設備間無縫流轉 |
統一生態,原生智能 | 構建統一生態并賦予設備智能能力 | 統一內核、AI引擎、分布式數據管理 | 設備根據用戶習慣自動優化使用體驗 |
二、DevEco Studio的使用
1. 編輯器的代碼閱讀功能有哪些?
- 代碼高亮:支持關鍵字、字符串等語法高亮,可在
File > Settings > 編輯器 > 配色方案
自定義顏色。 - 快速跳轉:按住
Ctrl
點擊類、方法名可跳轉到定義處,多引用時支持彈窗選擇。 - 代碼格式化:用
Ctrl+Alt+L
格式化代碼,通過//@formatter:off/on
排除指定代碼塊。 - 代碼折疊:點擊側邊欄按鈕或右鍵選擇折疊方式(如遞歸折疊)。
- 快速注釋:選中代碼后按
Ctrl+/
添加/取消行注釋。
2. 如何實現ArkUI組件的預覽?
- 頁面預覽:通過
@Entry
裝飾組件,在預覽器中直接顯示頁面效果。 - 組件預覽:用
@Preview
裝飾自定義組件,單個文件最多10個,支持實時預覽但不支持動態數據。
3. 多設備預覽的實現步驟是什么?
- 在
module.json5
中配置deviceTypes
(如["phone", "tablet"]
)。 - 打開預覽器的
Profile Manager
,自定義設備分辨率和語言。 - 開啟
Multi-profile preview
開關,同時查看多設備顯示效果。
4. 模擬器的常用操作方式有哪些?
- 交互操作:滑動屏幕(鼠標拖拽)、輸入文字(點擊輸入域后鍵盤輸入)、安裝應用(拖HAP包到屏幕)。
- 工具欄功能:旋轉屏幕、調節音量、截屏、模擬電池/GPS狀態、搖一搖操作。
5. 模擬器與真機的核心差異有哪些?
- 不支持功能:蜂窩網絡、拍照錄像、指紋識別、x86版本的華為推送和花瓣地圖。
- 支持功能:ArkUI組件、WiFi連接、本地數據管理、HiLog日志。
6. 編輯器快捷鍵匯總
功能 | 快捷鍵 | 說明 |
---|---|---|
代碼格式化 | Ctrl+Alt+L | 按預設規范格式化代碼 |
優化導入 | Ctrl+Alt+O | 清除未使用的import語句 |
快速注釋/取消注釋 | Ctrl+/ | 行注釋切換 |
生成構造器/getset | Alt+Insert | 快速生成類成員方法 |
代碼跳轉 | Ctrl+點擊 | 跳轉到定義處 |
7. 模擬器支持的設備類型與平臺
設備類型 | 支持平臺 | API版本 |
---|---|---|
手機、折疊屏 | Windows x86、Mac x86/arm | API 11、12 |
平板、2in1 | Windows x86、Mac x86/arm | API 11、12 |
8. 預覽器核心功能對比
功能 | 頁面預覽 | 組件預覽 |
---|---|---|
裝飾器 | @Entry | @Preview |
動態數據支持 | 支持 | 不支持 |
單個文件限制 | 1個 | 最多10個 |
使用場景 | 整體頁面效果調試 | 獨立組件樣式調試 |
9. 代碼重構功能列表
功能 | 說明 |
---|---|
提取變量 | 將表達式提取為常量 |
提取方法 | 將代碼塊提取為新函數 |
優化導入 | 合并/排序import語句,清除未使用項 |
重命名 | 批量重命名變量/方法/類 |
三、ArkTS基礎語法
1. 變量
[修飾符] 變量名[: 類型] [= 初始值];@State count: number = 0; // 帶修飾符、有類型、有初值
let name = "HarmonyOS"; // 無修飾符、有初值、類型推導
const PI: number = 3.14; // 常量,有類型、有初值
submitArrow?: () => void; // 可選函數類型屬性
注意變量必須賦值,且若沒有聯合類型包括null時,不可賦值為null
以下是鴻蒙(HarmonyOS)開發中常用變量類型的總結(基于ArkTS語言體系):
類型名稱 | 說明 | 示例 |
---|---|---|
基本類型 | ||
number | 數值類型,包含整數和浮點數 | let num: number = 10; |
string | 字符串類型,支持Unicode字符 | let str: string = "鴻蒙系統"; |
boolean | 布爾類型,值為true 或false | let isReady: boolean = true; |
null | 空值類型,表示變量無實際值 | let empty: null = null; |
undefined | 未定義類型,變量聲明未初始化時的默認值 | let uninit: undefined; |
void | 無返回值類型,常用于函數聲明 | function fn(): void { ... } |
引用類型 | ||
Array<T> | 數組類型,元素類型由泛型T 指定 | let arr: number[] = [1, 2, 3]; |
Object | 對象類型,包含鍵值對結構 | let obj: Object = { name: "鴻蒙" }; |
Function | 函數類型,用于聲明函數變量或參數 | let func: (a: number) => string; |
鴻蒙特化類型 | ||
ResourceStr | 字符串資源類型,用于引用工程中的字符串資源(如strings.json ) | @Entry @Component struct Index {<br> @State str: ResourceStr = $r('app.string.hello');<br>} |
ResourceColor | 顏色資源類型,用于引用工程中的顏色資源(如colors.json ) | let color: ResourceColor = $r('app.color.primary'); |
ResourceFile | 文件資源類型,用于引用工程中的文件資源(如圖像、字體等) | let img: ResourceFile = $r('app.media.icon'); |
裝飾器關聯類型 | ||
@State | 組件內部狀態變量,狀態變化觸發UI更新(非嚴格數據類型,需配合裝飾器使用) | @State count: number = 0; |
@Prop | 子組件接收父組件傳遞的屬性變量 | @Prop name: string; |
@Link | 雙向綁定變量,父子組件狀態同步 | @Link isActive: boolean; |
詳情見 鴻蒙開發 變量的定義和常用關鍵字屬性總結
2. 函數
定義
function 函數名(參數列表): 返回類型 {// 函數體
}
函數定義方式匯總
=>
后面跟的是函數的返回值,相當于return
方式 | 示例 | 說明 |
---|---|---|
命名函數 | function add(a: number, b: number): number {...} | 標準命名形式 |
匿名函數 | const fn = function(a: number) { ... } | 函數作為變量賦值 |
箭頭函數 | const fn = (a: number) => a * 2 | 簡潔形式,常用于回調 |
可選參數 | function greet(name?: string) { ... } | 參數可以不傳 |
默認參數 | function greet(name: string = "Guest") { ... } | 傳參為空時使用默認值 |
剩余參數 | function sum(...nums: number[]) { ... } | 不定數量參數 |
函數類型定義 | let fn: (x: number) => void | 聲明函數類型變量 |
函數返回函數(高階) | function outer(): () => void { ... } | 返回一個函數 |
函數定義中涉及的關鍵點
特性 | 說明 |
---|---|
? | 參數可選 |
= | 參數默認值 |
... | 剩余參數 |
=> | 箭頭函數(無 this 綁定) |
類型注解 | 參數與返回值都應明確類型(ArkTS 強類型) |
可選鏈調用 | fn?.() 調用可選函數變量 |
常見用于函數的 @
修飾符匯總
裝飾器 | 使用位置 | 作用描述 | 示例 |
---|---|---|---|
@Builder | 函數 | 表示該函數用于描述 UI 結構(ArkTS 的聲明式 UI 構建核心) | @Builder buildUI() { ... } |
@Entry | 組件類/函數 | 表示應用的入口組件或入口構建函數 | @Entry buildApp() { ... } |
@Component | 函數/類 | 聲明這是一個組件定義(可視圖結構) | @Component struct MyButton {} |
@Styles | 函數 | 定義樣式構建函數(搭配 @Builder ) | @Styles styleFn() { ... } |
@Preview | 函數 | 在 DevEco Studio 中預覽函數結果(僅開發預覽用) | @Preview previewUI() { ... } |
@Provide | 函數/變量 | 向下傳遞依賴注入數據 | @Provide('theme') getTheme() {} |
詳情見 鴻蒙開發-函數的定義總結
3. 裝飾器
裝飾器 | 用途 | 限制規則 | 示例 |
---|---|---|---|
組件定義 | |||
@Entry | 標記組件為頁面入口,每個頁面必須有且僅有一個@Entry 組件 | - 必須在@Component 類上使用- 每個頁面( .ets 文件)只能有一個- 通常位于頂層組件 | typescript<br>@Entry<br>@Component<br>struct Index {<br> build() { ... }<br>}<br> |
@Component | 聲明類為ArkUI組件 | - 必須用于類聲明 - 類必須包含 build() 方法定義UI結構 | typescript<br>@Component<br>struct MyComponent {<br> build() { ... }<br>}<br> |
狀態管理 | |||
@State | 聲明組件內部響應式狀態變量,值變化觸發UI刷新 | - 必須顯式指定類型 - 必須初始化(如 @State count: number = 0 )- 只能在 @Component 類中使用 | typescript<br>@State message: string = 'Hello';<br> |
@Prop | 聲明子組件接收父組件傳遞的單向數據(屬性) | - 必須顯式指定類型 - 不能初始化(由父組件賦值) - 子組件中不可修改(只讀) | typescript<br>// 父組件<br><ChildComponent title="父數據" /><br>// 子組件<br>@Prop title: string;<br> |
@Link | 聲明雙向綁定變量,與父組件狀態同步 | - 必須顯式指定類型 - 必須通過 .link() 方法初始化(如@Link value: number = this.parentValue.link() )- 父子組件均可修改 | typescript<br>// 父組件<br>@State parentValue: number = 10;<br>// 子組件<br>@Link childValue: number = this.parentValue.link();<br> |
@Provide | 聲明向子組件樹提供的共享數據 | - 必須顯式指定類型 - 必須初始化 - 可在任意層級子組件中通過 @Consume 接收 | typescript<br>// 祖先組件<br>@Provide theme: string = 'light';<br>// 子組件<br>@Consume theme: string;<br> |
@Consume | 聲明接收祖先組件通過@Provide 提供的數據 | - 必須顯式指定類型 - 不可初始化(自動關聯 @Provide )- 子組件中不可修改(只讀) | typescript<br>@Consume sharedData: string;<br> |
@StorageLink | 聲明與本地存儲(Preferences)綁定的響應式變量 | - 必須顯式指定類型 - 必須通過 @StorageLink('key') 初始化- 支持基本類型和簡單對象 | typescript<br>@StorageLink('userInfo') user: User = new User();<br> |
@StorageProp | 聲明從本地存儲讀取的單向數據 | - 必須顯式指定類型 - 不可初始化(從存儲讀取) - 組件內不可修改(只讀) | typescript<br>@StorageProp('username') name: string;<br> |
生命周期 | |||
@Builder | 標記函數作為UI構建器,用于封裝重復UI邏輯 | - 必須用于函數聲明 - 函數返回類型必須為 void - 函數內部必須調用UI組件 | typescript<br>@Builder<br>Header() {<br> Text('標題').fontSize(20)<br>}<br> |
自定義組件 | |||
@Extend | 標記組件擴展另一個組件的屬性和方法 | - 必須用于類聲明 - 被擴展的組件必須使用 @Component 裝飾器 | typescript<br>@Component<br>struct BaseComponent { ... }<br>@Extend(BaseComponent)<br>struct ExtendedComponent { ... }<br> |
@CustomDialog | 聲明自定義對話框組件 | - 必須用于類聲明 - 類必須包含 build() 方法定義對話框內容 | typescript<br>@CustomDialog<br>struct MyDialog {<br> aboutToAppear() { ... }<br> build() { ... }<br>}<br> |
@Preview | 聲明組件預覽,用于DevEco Studio預覽面板展示 | - 必須用于類聲明 - 類必須使用 @Component 裝飾器- 不影響實際運行邏輯 | typescript<br>@Preview<br>@Component<br>struct PreviewComponent {<br> build() { ... }<br>}<br> |
詳情見 鴻蒙期末復習-裝飾器篇
三、框架
3.1. 多Module設計機制核心特性
-
模塊化開發
- 設計理念:將應用功能按模塊拆分,每個Module獨立包含源代碼、資源、第三方庫及配置文件,支持獨立編譯,實現松耦合的開發模式。
- 優勢:簡化復雜應用的開發流程,便于團隊協作、功能迭代與維護擴展。
-
多設備適配
- 設備類型標注:每個Module可指定支持的設備類型(如手機、平板、智能穿戴等)。
- 分發策略:應用市場根據設備類型篩選匹配Module,實現精準部署,優化不同設備的資源占用與功能適配。
1. Ability類型Module(功能實現模塊)
類型 | 作用 | 編譯產物 | 特性 |
---|---|---|---|
entry Module | 應用主模塊,包含入口界面、圖標及核心功能 | entry類型HAP | 每個設備的應用包只能有一個entry HAP,是應用啟動的入口。 |
feature Module | 動態特性模塊,實現可按需加載的功能(如插件、擴展功能) | feature類型HAP | 可包含多個,按需集成到應用中,提升安裝包輕量化與功能靈活性。 |
- HAP包(Harmony Ability Package):Ability類型Module的編譯產物,是應用安裝的基本單位,可獨立運行。
2. Library類型Module(代碼與資源共享模塊)
類型 | 編譯產物 | 作用 | 特性 |
---|---|---|---|
Static Library | .har(靜態共享包) | 封裝可復用的代碼與資源,被其他Module引用時直接嵌入目標包。 | 編譯時靜態鏈接,包體積較大,但運行效率高。 |
Shared Library | .hsp(動態共享包) .har(接口描述文件) | 動態共享代碼與資源,運行時按需加載,多個Module可共享同一實例。 | 編譯生成.hsp(包含實現)和.har(包含接口),引用時通過.har調用.hsp功能,降低包體積。 |
- HAR(Harmony Archive):靜態共享包,用于封裝可復用的模塊資源。
- HSP(Harmony Shared Package):動態共享包,支持運行時動態加載,提升應用模塊化能力。
更多詳見 期末考試復習總結-《應用程序框架基礎》
3.2. UIAbility的生命周期
(1)Create狀態
? Create狀態為UIAbility實例創建完成時觸發,系統會調用onCreate()回調。可以在該回調中進行頁面初始化操作,例如變量定義、資源加載等。
(2)WindowStageCreate和WindowStageDestroy狀態
? UIAbility實例創建完成之后,在進入Foreground之前,系統會創建一個WindowStage。
(3)WindowStageWillDestroy狀態
(4)Foreground和Background狀態
? onForeground()回調,在UIAbility切換至前臺時觸發。
? onBackground()回調,在UIAbility切換至后臺時候觸發。
? 例如應用在使用過程中需要使用用戶定位時,假設應用已獲得用戶的定位權限授權。在UI顯示之
前,可以在onForeground()回調中開啟定位功能,從而獲取到當前的位置信息。
? 當應用切換到后臺狀態,可以在onBackground()回調中停止定位功能,以節省系統的資源消耗。
(5)Destroy狀態
? Destroy狀態在UIAbility實例銷毀時觸發。可以在onDestroy()回調中進行系統資源的釋放、數據的
保存等操作。
3.3.組件啟動模式
UIAbility的啟動模式是指UIAbility實例在啟動時的不同呈現狀態。針對不同的業務場景,系統提供
了三種啟動模式:
? singleton(單實例模式)
singleton啟動模式為單實例模式,也是默認情況下的啟動模式。調用startAbility()方法時,如果應用進程中該類型的UIAbility實例已經存在,則復用系統中的UIAbility實例。系統中只存在唯一一個該UIAbility實例,即在最近任務列表中只存在一個該類型的UIAbility實例。
? multiton(多實例模式)
multiton啟動模式為多實例模式,每次調用startAbility()方法時,都會在應用進程中創建一個新的該類型UIAbility實例。即在最近任務列表中可以看到有多個該類型的UIAbility實例。
? specified(指定實例模式)
specified啟動模式為指定實例模式,針對一些特殊場景使用(例如文檔應用中每次新建文檔希望都能新建一個文檔實例,重復打開一個已保存的文檔希望打開的都是同一個文檔實例)。
3.4.Page Ability 生命周期
詳情見 鴻蒙考試-Ability生命周期篇
生命周期階段對比
-
UIAbility(框架層組件)
- 鴻蒙應用框架的核心組件,負責管理應用的窗口、生命周期及跨設備能力(如多窗口、跨端遷移)。
- 是系統調度的基本單元,每個UIAbility對應一個獨立的任務窗口。
-
Page Ability(UI層頁面)
- 基于ArkUI框架的頁面組件,是UIAbility的具體實現,負責頁面UI的渲染和交互邏輯。
- 屬于UIAbility的內部頁面管理范疇,生命周期受UIAbility控制。
UIAbility生命周期 | Page Ability生命周期 | 聯系 | 區別 |
---|---|---|---|
Create(onCreate) | onInit | UIAbility創建時觸發Page的初始化,兩者均用于資源初始化(變量、監聽注冊)。 | UIAbility側重組件級資源加載,Page側重頁面級數據初始化。 |
WindowStageCreate | onReady | WindowStage創建完成后,Page的UI加載完成,可動態修改布局。 | UIAbility關注窗口創建,Page關注UI渲染完成。 |
Foreground(onForeground) | onShow + onActive | UIAbility切換至前臺時,Page先顯示(onShow)后獲取焦點(onActive)。 | UIAbility的前臺狀態對應Page的“可見且可交互”,Page細分了顯示與焦點狀態。 |
Background(onBackground) | onInactive + onHide | UIAbility切后臺時,Page先失去焦點(onInactive)后隱藏(onHide)。 | UIAbility的后臺狀態對應Page的“不可見或不可交互”,Page細分了焦點與隱藏狀態。 |
Destroy(onDestroy) | onDestroy | UIAbility銷毀時,Page隨之銷毀,均用于釋放資源(注銷監聽、保存數據)。 | UIAbility銷毀會觸發Page銷毀,Page無法獨立于UIAbility存在。 |
3.5.配置文件
主要配置文件概述
配置文件名稱 | 存儲位置 | 主要作用 |
---|---|---|
app.json5 | 項目根目錄 | 應用全局配置,定義應用基本信息(如包名、版本、模塊列表等) |
module.json5 | 各模塊根目錄(如entry/src/main ) | 模塊級配置,聲明模塊能力(UIAbility、服務等)、權限、設備支持類型等 |
build-profile.json5 | 項目根目錄build 文件夾 | 構建配置,定義編譯參數、簽名信息、產物輸出路徑等 |
entry.json | (可選)部分舊項目 | 早期版本配置文件,現逐步被module.json5 替代 |
1. app.json5
常用選項
字段名稱 | 所屬層級 | 作用描述 |
---|---|---|
app.name | app | 應用顯示名稱 |
app.package | app | 應用包名(唯一標識) |
app.version | app | 應用版本信息(code 和name ) |
modules | 根層級 | 定義應用包含的模塊列表,每個模塊需指定類型(如entry )和路徑 |
deviceConfig | 根層級 | 設備相關配置(如不同設備的差異化參數) |
2. module.json5
常用選項
字段名稱 | 所屬層級 | 作用描述 |
---|---|---|
abilities | module | 聲明模塊中的UIAbility組件,包含名稱、入口路徑、圖標等信息 |
deviceTypes | module | 標識模塊支持的設備類型(如phone 、tablet 、wearable 等) |
requestPermissions | module | 聲明應用需要申請的系統權限(如定位、存儲等) |
name | module | 模塊名稱(如entry ) |
description | module | 模塊描述信息 |
distro | module | 模塊分發配置(如是否為系統模塊) |
3. build-profile.json5
常用選項
字段名稱 | 所屬層級 | 作用描述 |
---|---|---|
buildOption | 根層級 | 構建選項,包含編譯參數、產物類型(app /hap )、簽名配置引用等 |
signingConfigs | 根層級 | 簽名配置,存儲證書和密鑰信息(調試版和發布版) |
targets | 根層級 | 構建目標配置(如編譯平臺、ABI類型) |
outputPath | buildOption | 構建產物輸出路徑 |
compileSdkVersion | buildOption | 編譯使用的SDK版本 |
targetSdkVersion | buildOption | 目標SDK版本(影響API兼容性) |
3.6. 一些規定
規則類型 | 具體規則 | 限制說明 | 示例/注意事項 |
---|---|---|---|
聲明式UI構建(@Builder) | 禁止使用普通for 循環,需用List.forEach 或循環組件 (如ForEach )。 | 聲明式UI要求UI可重建,普通循環無法被框架追蹤狀態變化,可能導致UI更新異常。 | typescript<br>// 錯誤:build中不能用for<br>for (let i = 0; i < 5; i++) {}<br>// 正確:<br>[1,2,3].forEach(item => {})<br>// 或使用ForEach組件<br><ForEach elements={list} item={item => <Text>{item}</Text>}></ForEach> |
函數定義 | 自定義UI構建函數必須使用@Builder 裝飾,禁止普通函數。 | @Builder 裝飾器確保函數在UI狀態變化時可被框架觸發重建,普通函數無法參與UI更新流程。 | typescript<br>// 錯誤:<br>function CommonFunc() {}<br>// 正確:<br>@Builder MyBuilder() {} |
狀態變量聲明 | 組件內狀態變量必須使用@State 、@Link 、@Prop 等裝飾器,禁止普通變量。 | 裝飾器用于標記狀態依賴關系,框架通過裝飾器追蹤變化并觸發UI更新,普通變量無法觸發更新。 | typescript<br>// 錯誤:<br>let count = 0;<br>// 正確:<br>@State count: number = 0; |
組件命名與結構 | 組件名稱必須以大寫字母開頭,且文件名與組件名一致;@Entry 組件必須包含build 函數。 | 遵循駝峰命名規范,確保框架能正確識別組件;build 函數是UI渲染的入口。 | typescript<br>// 組件文件必須為MyComponent.ets,組件名MyComponent<br>@Entry<br>struct MyApp {<br> build() { ... }<br>} |
語法限制 | 禁止在build 函數中使用try-catch 、throw 等異常處理語法(部分場景允許)。 | build 函數需保持純粹的UI描述,異常處理可能破壞UI重建邏輯。 | typescript<br>// 建議在業務邏輯中處理異常,而非build內<br>function handleError() {<br> try { ... } catch(e) { ... }<br>} |
模塊依賴 | entry 模塊禁止直接引用feature 模塊資源,需通過har 包共享。 | 模塊化設計要求隔離業務模塊,feature 模塊需編譯為har 供entry 引用。 | - |
四、UI樣式
4.1. 圖片
4.2. 布局
4.2.1 Grid 布局相關知識總結表
屬性/概念 | 說明 | 示例/用法 |
---|---|---|
Grid 容器 | 基于網格的二維布局容器,通過行(rows)和列(columns)定義子組件位置。 | <Grid columnsTemplate="1fr 1fr" rowsTemplate="50vp 50vp">...</Grid> |
columnsTemplate | 定義列寬,支持fr (比例單位)、px 、vp 等單位,多個值用空格分隔。 | columnsTemplate="1fr 2fr" :兩列寬度比例為1:2columnsTemplate="100px 50%" :第一列100px,第二列占容器寬度50% |
rowsTemplate | 定義行高,單位與columnsTemplate 一致。 | rowsTemplate="80vp 1fr" :第一行80vp,第二行占剩余空間比例1fr |
fr 單位 | 彈性比例單位,基于容器剩余空間分配。1fr表示1份,2fr表示2份,依此類推。 | columnsTemplate="1fr 3fr" :兩列寬度比為1:3 |
GridItem 定位 | 通過gridColumn (列)和gridRow (行)指定子組件所在網格位置。 | <GridItem gridColumn="1" gridRow="2">...</GridItem> :位于第1列第2行 |
常用布局場景 | - 等寬列:columnsTemplate="1fr 1fr 1fr" (三列等寬)- 固定+彈性列: columnsTemplate="120px 1fr" (第一列120px,第二列占剩余空間) | |
與Row/Column的區別 | Grid是二維布局(行列交叉),Row/Column是一維布局(水平/垂直方向)。 | 復雜網格布局(如表格、宮格)優先使用Grid,簡單線性排列用Row/Column。 |
4.2.2 對齊
場景 | Start/End 的含義 | Center 的含義 |
---|---|---|
Row 主軸 | 水平方向的左/右對齊 | 水平居中 |
Column 主軸 | 垂直方向的上/下對齊 | 垂直居中 |
Row/Column 交叉軸 | 垂直/水平方向的頂部/底部對齊(Row用VerticalAlign ) | 垂直/水平居中(Row用VerticalAlign.Center ) |
文本對齊 | 文本起始/結束位置對齊(與閱讀方向有關) | 文本居中 |
場景 | Top/Bottom 的含義 | Center 的含義 |
---|---|---|
Row 交叉軸 | 垂直方向的頂部/底部對齊 | 垂直居中 |
Stack 定位 | 子組件居頂部/底部(水平默認居中) | 完全居中 |
Swiper 指示器 | 指示器位置居頂部/底部 | 指示器垂直居中 |
Dialog 位置 | 對話框從頂部/底部彈出 | 對話框居中顯示 |
4.2.3 Tabs組件
屬性/概念 | 說明 | 示例/用法 |
---|---|---|
BarPosition | 導航欄在主軸方向的對齊位置,枚舉值: - Start :起始端- End :結束端- Center :居中- Float :懸浮 | <Tabs barPosition={BarPosition.End}>...</Tabs> :導航欄在底部或右側(取決于vertical ) |
vertical | 控制Tabs布局方向: - false (默認):水平布局(導航欄在上,內容在下)- true :垂直布局(導航欄與內容左右排列) | <Tabs vertical={true}>...</Tabs> :垂直布局,導航欄與內容區水平排列 |
BarMode | 導航欄顯示模式,枚舉值: - Scrollable :可滾動(標簽過多時)- Fixed :固定寬度(均分容器寬度) | <Tabs barMode={BarMode.Scrollable}>...</Tabs> :標簽過多時可橫向滾動 |
Index | 當前選中標簽的索引(從0開始)。 | <Tabs index={1}>...</Tabs> :默認選中第2個標簽 |
TabContent | 標簽內容容器,每個標簽對應一個TabContent。 | <TabContent tabBar={<Text>標簽1</Text>}>內容1</TabContent> |
常用布局場景 | - 頂部導航:vertical=false (默認),barPosition=BarPosition.Start - 底部導航: vertical=false ,barPosition=BarPosition.End - 左側導航: vertical=true ,barPosition=BarPosition.Start - 右側導航: vertical=true ,barPosition=BarPosition.End |
4.2.4 子組件
特定容器組件有固定子元素類型
List → 僅允許包含ListItem
Grid → 僅允許包含GridItem
TabContent → 僅允許包含TabPane
Stack → 僅允許包含StackItem
布局組件(Column/Row/Stack)可自由嵌套
布局組件可作為外層包裹容器組件(如Column>List),或作為容器子元素的內部布局(如ListItem>Row)
4.2.5 Swiper組件
屬性名 | 類型 | 默認值 | 作用 |
---|---|---|---|
loop | boolean | false | 是否開啟循環輪播,true時首尾頁無縫銜接(如從最后一頁切到第一頁)。 |
autoPlay | boolean | false | 是否自動輪播,開啟后按interval 間隔切換。 |
interval | number | 3000 | 自動輪播間隔時間(毫秒)。 |
duration | number | 500 | 切換動畫時長(毫秒)。 |
vertical | boolean | false | 輪播方向,true為垂直滾動,false為水平滾動。 |
index | number | 0 | 當前顯示的子項索引,可雙向綁定實現編程控制。 |
showPagination | boolean | true | 是否顯示導航點(分頁指示器)。 |
paginationStyle | object | - | 導航點樣式(顏色、大小、選中狀態等)。 |
4.3. 文本
4.3.1 TextDecoration 相關知識總結表
屬性 | 類型 | 合法值 | 示例用法 |
---|---|---|---|
decoration, 需同時設置 type 、color 、style 三個子屬性,缺一不可。 | TextDecoration | { type: TextDecorationType, color: Color, style: TextDecorationStyle } | <Text decoration={{ type: TextDecorationType.LineThrough, color: Color.Red }}>刪除文本</Text> |
TextDecorationType | 枚舉 | None LineThrough Underline (底部裝飾線) | <Text decoration={{ type: TextDecorationType.Underline }}>下劃線</Text> |
TextDecorationStyle | 枚舉 | Solid Double Dotted Dashed Wavy | <Text decoration={{ type: TextDecorationType.Underline, style: TextDecorationStyle.Dotted }}>虛線</Text> |
TextDecorationColor | Color | 支持顏色值(如 Color.Red 、#FF0000 、rgba(255,0,0,1) ) | <Text decoration={{ type: TextDecorationType.Underline, color: '#FF0000' }}>紅色下劃線</Text> |
4.4 導航
核心跳轉方法對比
方法名 | 作用描述 | 參數說明 | 頁面棧變化 |
---|---|---|---|
pushPathByName | 入棧新頁面,保留當前頁面在棧中 | pageName (頁面名稱)、params (路由參數)、animate (是否動畫,默認true) | 棧深度+1,新頁面成為棧頂 |
replacePathByName | 替換棧頂頁面,原棧頂頁面出棧 | pageName 、params 、animate (同上) | 棧頂元素替換,棧深度不變 |
pop() | 彈出棧頂頁面,返回上一頁 | 無參數 | 棧深度-1,上一頁成為棧頂 |
popToPage() | 彈出至指定頁面,中間頁面全部出棧 | pageName (目標頁面名稱) | 棧深度調整為目標頁面的位置 |
clearAndPushPath() | 清空棧中所有頁面,再入棧新頁面 | pageName 、params 、animate | 棧重置為僅包含新頁面 |
路由參數傳遞方式
方式 | 說明 | 示例 |
---|---|---|
基本參數傳遞 | 通過路由參數對象 傳遞簡單數據(字符串、數值、布爾等) | { key: 'value', num: 123 } |
跨頁面數據共享 | 使用AppStorage 或GlobalContext 實現全局數據共享,適合大數據或復雜對象傳遞 | AppStorage.SetOrCreate('dataKey', dataValue) |
URI路由傳遞 | 通過URI格式傳遞參數(適用于跨應用跳轉) | pushPathByName('pages/Detail', { uri: 'detail?param1=1¶m2=abc' }) |
鴻蒙 Navigation 布局模式
模式名稱 | 英文名稱 | 應用場景 | 典型界面 |
---|---|---|---|
單頁面模式 | SinglePage | 內容在同一頁面內切換,無頁面跳轉,適合簡單信息展示或標簽式導航。 | 底部Tab導航、標簽頁(Tabs) |
層疊模式 | Stack | 頁面按棧結構管理,支持前進/后退邏輯,符合移動端用戶習慣。 | 傳統App的頁面跳轉(如詳情頁→列表頁) |
分欄模式 | Split | 大屏設備專屬,左右分欄顯示導航與內容,支持自適應切換(大屏分欄/小屏層疊)。 | 平板端的文件管理器(左側目錄+右側內容) |
不同導航位置的配置組合
導航位置 | vertical | barPosition | 布局效果 |
---|---|---|---|
頂部導航 | false | Start | 導航欄在頂部,內容區在下方,標簽從左到右排列。 |
底部導航 | false | End | 導航欄在底部,內容區在上方,標簽從左到右排列。 |
左側導航 | true | Start | 導航欄在左側,內容區在右側,標簽從上到下排列。 |
右側導航 | true | End | 導航欄在右側,內容區在左側,標簽從上到下排列。 |
頂部居中 | false | Center | 導航欄在頂部且居中,內容區在下方。 |
懸浮導航 | false | Float | 導航欄懸浮在內容區上方(通常帶背景色和陰影)。 |