鴻蒙開發11-ARKUI框架

ARKUI(方舟 UI 框架)是 HarmonyOS Next(原 OpenHarmony)的核心 UI 開發框架,基于聲明式編程范式,支持 ArkTS 語言,能夠高效構建跨設備的響應式應用。以下是對 ARKUI 框架及開發的詳細介紹:

一、ARKUI 框架核心特性

1.1 聲明式開發范式

@Entry
@Component
struct HelloWorld {build() {Text('Hello ArkUI').fontSize(30).color(Color.Blue)}
}

優勢:

  • 高效開發:代碼量減少 30% 以上,開發效率提升。
  • 自動更新:狀態變化時自動觸發 UI 重渲染,無需手動操作 DOM。
  • 跨設備適配:一套代碼適配手機、平板、智慧屏等多終端。

1.2 組件化體系

  • 基礎組件:如 Image(圖片)、Text(文本)、TextInput(文本輸入)、Button(按鈕)、Slider(滑動條)等。
  • 容器組件::包括 Column(垂直布局)、Row(水平布局)、Stack(堆疊布局)、Flex(彈性布局)、List(列表容器)、Grid(網格容器)、Swiper(輪播圖)等。
  • 媒體組件:有 Video(視頻播放)、Audio(音頻播放)組件。
  • 繪制組件:Canvas 畫布組件用于自定義繪制圖形。
  • 自定義組件:通過@Component封裝可復用組件。
  • 其他組件:Span 作為 Text 組件的子組件顯示行內文本片段,RichText 用于解析并顯示 HTML 格式文本,Blank 用于在容器主軸方向上自動填充空余部分,Divider 作為分隔器組件分隔不同內容塊或元素。

1.3 狀態管理

狀態裝飾器

  • @State:組件內私有狀態,值變化觸發 UI 更新。
  • @Prop:父組件向子組件單向傳遞數據。
  • @Link:父子組件雙向數據綁定。
  • @Provide/@Consume:跨層級狀態共享。
@Component
struct Child {@Link value: number;build() { Button(`子組件: ${this.value}`).onClick(() => this.value++) }
}@Entry
struct Parent {@State count = 0;build() {Column() {Text(`父組件: ${this.count}`)Child({ value: $count }) // 雙向綁定}}
}

1.4 布局系統

Flex 布局:通過flexDirection、justifyContent等屬性實現彈性布局。

Row({ justifyContent: FlexAlign.SpaceBetween }) {Text('左').width('33%')Text('中').width('33%')Text('右').width('33%')
}

Grid 布局:二維網格布局,支持columns、rows等屬性。

Grid({ columns: 3, rows: 2 }) {ForEach(data, (item) => Text(item).width('100%'))
}

1.5 路由導航

頁面跳轉:使用router.pushUrl或router.replaceUrl。

Button('跳轉').onClick(() => router.pushUrl({ url: 'pages/detail' }))

分欄布局:通過Navigation組件實現自適應分欄。

Navigation({ mode: NavigationMode.Auto }) {NavRouter() {Text('導航欄').width('20%')NavDestination() { Text('內容區') }}
}

二、ARKUI 開發流程

2.1 環境搭建

  • 安裝 DevEco Studio:官方 IDE,支持代碼編輯、調試、打包。
  • 配置 SDK:在File > Settings > SDK中下載 HarmonyOS SDK。
  • 創建項目:選擇Empty Ability (Stage Model)模板,使用 ArkTS 語言。

2.2 項目結構

entry
├── src/main/ets
│   ├── pages
│   │   └── Index.ets       # 主頁面
│   ├── components          # 自定義組件
│   └── model               # 數據模型
├── resources               # 資源文件(圖片、字符串)
└── config.json             # 應用配置

2.3 開發實踐

組件復用:通過@Component封裝可復用組件。

@Component
struct ButtonComponent {@Prop text: string;build() { Button(this.text).width('100%') }
}

事件處理:綁定點擊、觸摸等事件。

Button('點擊').onClick(() => this.count++)

數據綁定:實現 UI 和數據模型之間的雙向聯系,當數據變化時 UI 自動更新,反之亦然。

import { View, Input, Text } from 'harmonium';
export default function DataBindingExample() {const [name, setName] = useState('');return (<View><Input value={name} onChange={(e) => setName(e.value)} /><Text>你好,{name}!</Text></View>);
}

動態樣式:根據組件的狀態或外部條件動態設置樣式。

import { View, Text, Button } from 'harmonium';
export default function DynamicStyleExample() {const [isActive, setActive] = useState(false);return (<View><Text style={{ color: isActive ? 'red' : 'blue' }}>激活狀態: {String(isActive)}</Text><Button onPress={() => setActive(!isActive)}>切換狀態</Button></View>);
}

動畫效果:使用animateTo實現屬性動畫。

Button('縮放').onClick(() => {animateTo({duration: 500,component: this,styles: { scale: 1.5 }})
})

三、性能優化與最佳實踐

3.1 狀態管理優化

使用@Watch監聽特定狀態變化,避免過度渲染。

@State @Watch('onCountChange') count = 0;
onCountChange() {// 狀態變化處理
}

對于不可見組件,使用freezeWhenInactive減少刷新。

@Component
struct LazyComponent {build() {// freezeWhenInactive處于非活躍狀態時凍結刷新Text('延遲渲染').freezeWhenInactive(true)}
}

避免過度渲染:使用@Watch監聽特定狀態變化。

@State @Watch('onCountChange') count = 0;
onCountChange() { /* 狀態變化處理 */ }

組件凍結:使用freezeWhenInactive減少不可見組件刷新。

@Component
struct LazyComponent {build() { Text('延遲渲染').freezeWhenInactive(true) }
}

3.2 布局優化

使用 LazyForEach:延遲加載列表項。

LazyForEach(data, (item) => Text(item)).cachedCount(3) // 預加載3個緩存項

精簡節點:避免深層嵌套布局,使用RenderGroup合并渲染層級。

RenderGroup() {Column() { /* 復雜布局 */ }
}

3.3 動畫優化

使用硬件加速:對頻繁變化的屬性(如translate)啟用 GPU 加速,使用enableHardwareAcceleration(true)。

Text('移動').translateX(100).enableHardwareAcceleration(true)

避免阻塞主線程:將耗時操作(如網絡請求)放在子線程。

async fetchData() {const result = await http.get('https://api.example.com/data');this.data = result;
}

四、總結

ARKUI 框架通過聲明式語法、組件化體系和高效的狀態管理,大幅提升了 HarmonyOS 應用的開發效率和性能。開發者可通過 DevEco Studio 快速搭建項目,結合 Flex/Grid 布局、路由導航和動畫能力,構建跨設備的響應式應用。同時,合理使用性能優化技巧(如狀態監聽、懶加載、硬件加速)可進一步提升用戶體驗。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76397.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76397.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76397.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 進程間通信詳解

一.進程間通信介紹 1. 進程間通信概念 進程間通信&#xff08;Inter-Process Communication, IPC&#xff09;是指在不同進程之間傳遞或交換信息的一種機制。在操作系統中&#xff0c;進程是資源分配和獨立運行的基本單位&#xff0c;它們擁有各自獨立的內存空間和系統資源。…

從0開始掌握動態規劃

動態規劃的核心思想 -- 以空間換時間 復雜點說通過分解問題為子問題并存儲子問題解來優化復雜計算的算法策略。 簡單看個問題。 一&#xff0c;初始&#xff1a;求最長連續遞增子序列 nums [10,9,2,5,3,7,101,18] 求上面數組中的最長連續遞增子序列&#xff0c;輸出其長度 …

Python Requests 庫:從安裝到精通

摘要 本文詳細介紹 Python Requests 庫的安裝與使用&#xff0c;通過常見示例讓你輕松掌握。 一、引言 在當今的互聯網時代&#xff0c;與各種 Web 服務進行交互是非常常見的需求。Python 作為一門功能強大且易于學習的編程語言&#xff0c;提供了許多用于網絡請求的庫&…

Manus技術架構、實現內幕及分布式智能體項目實戰

Manus技術架構、實現內幕及分布式智能體項目實戰 模塊一&#xff1a; 剖析Manus分布式多智能體全生命周期、九大核心模塊及MCP協議&#xff0c;構建低幻覺、高效且具備動態失敗處理能力的Manus系統。 模塊二&#xff1a; 解析Manus大模型Agent操作電腦的原理與關鍵API&#xf…

C算術運算符 printf輸出格式 字符指針打印輸出 使用scanf函數進行輸入

一 算術運算符 加, 一元取正 - 減, 一元取負 * 乘 / 除 % 求余 -- 自減1 自加1 邏輯運算符 && 邏輯與 || 邏輯或 ! 邏輯非 關系運算符 > 大于 > 大于等于 < 小于 < 小于等于 等于 ! 不等于 位運算符號 & 按位與 | 按位或 ^ 按位異或…

STM32中Hz和時間的轉換

目錄 一、常見的頻率單位及其轉換 二、計算公式 三、STM32中定時器的應用 四、例子 一、常見的頻率單位及其轉換 赫茲&#xff08;Hz&#xff09;是頻率的國際單位&#xff0c;表示每秒鐘周期性事件發生的次數。 1 kHz&#xff08;千赫茲&#xff09; 1,000 Hz1 MHz&#…

《分布式軟總線:不同頻段Wi-Fi環境下設備發現兼容性難題》

分布式軟總線技術作為實現設備互聯互通的關鍵&#xff0c;正逐漸成為構建萬物互聯世界的基石。然而&#xff0c;當分布式軟總線面臨不同頻段Wi-Fi環境時&#xff0c;設備發現的兼容性問題成為了阻礙其廣泛應用的一大挑戰。這一問題不僅影響著用戶體驗&#xff0c;也制約著分布式…

MCP(Model Context Protocol 模型上下文協議)科普

MCP&#xff08;Model Context Protocol&#xff0c;模型上下文協議&#xff09;是由人工智能公司 Anthropic 于 2024年11月 推出的開放標準協議&#xff0c;旨在為大型語言模型&#xff08;LLM&#xff09;與外部數據源、工具及服務提供標準化連接&#xff0c;從而提升AI在實際…

【mongodb】數據庫操作

目錄 1. 查看所有數據庫2. 切換到指定數據庫&#xff08;若數據庫不存在&#xff0c;則創建&#xff09;3. 查看當前使用的數據庫4. 刪除當前數據庫5.默認數據庫 1. 查看所有數據庫 1.show dbs2.show databases 2. 切換到指定數據庫&#xff08;若數據庫不存在&#xff0c;則…

ICPR-2025 | 讓機器人在未知環境中 “聽懂” 指令精準導航!VLTNet:基于視覺語言推理的零樣本目標導航

作者&#xff1a;Congcong Wen, Yisiyuan Huang, Hao Huang ,Yanjia Huang, Shuaihang Yuan, YuHao, HuiLin and Yi Fang 單位&#xff1a;紐約大學阿布扎比分校具身人工智能與機器人實驗室&#xff0c;紐約大學阿布扎比分校人工智能與機器人中心&#xff0c;紐約大學坦登工程…

基于DeepSeek的考研暑假日志分析

注&#xff1a;我去年考研時寫了日志&#xff0c;大致記錄了我每天的主要活動。由于過于瑣碎&#xff0c;一直沒有翻看。突發奇想&#xff0c;現在利用deepseek總結其中規律。 從你的日志中可以總結出以下規律和活動興衰起落&#xff1a; ??一、學習活動規律與演變?? ??…

【刷題Day20】TCP和UDP

TCP 和 UDP 有什么區別&#xff1f; TCP提供了可靠、面向連接的傳輸&#xff0c;適用于需要數據完整性和順序的場景。 UDP提供了更輕量、面向報文的傳輸&#xff0c;適用于實時性要求高的場景。 特性TCPUDP連接方式面向連接無連接可靠性提供可靠性&#xff0c;保證數據按順序…

REST 架構詳解:從概念到應用的全面剖析

REST&#xff08;Representational State Transfer&#xff09;即表述性狀態轉移&#xff0c;是一種用于構建網絡應用程序的架構風格和設計理念&#xff0c;由計算機科學家羅伊?菲爾丁&#xff08;Roy Fielding&#xff09;在 2000 年提出。以下是關于它的詳細介紹&#xff1a…

藍橋杯之遞歸二

1.數的劃分 題目描述 將整數 nn 分成 kk 份&#xff0c;且每份不能為空&#xff0c;任意兩份不能相同(不考慮順序)。 例如&#xff1a;n7&#xff0c;k3n7&#xff0c;k3&#xff0c;下面三種分法被認為是相同的。 1&#xff0c;1&#xff0c;5;1&#xff0c;5&#xff0c;…

LeetCode(Hot.2)—— 49.字符異位詞分組題解

Problem: 49. 字母異位詞分組 字母異位詞的定義是&#xff1a;兩個單詞的字母組成一樣&#xff0c;但順序可以不同&#xff0c;比如 eat、tea 和 ate 就是一個組的。 思路 將每個字符串按字母排序&#xff0c;把排序后的字符串作為 key&#xff0c;相同 key 的放在一個 list 中…

為什么信號完整性對于高速連接器設計至關重要?

外部連接器通過在各種電子元件和系統之間可靠地傳輸數據而不損失保真度來保持信號完整性。在本文中&#xff0c;我們將討論信號完整性的重要性&#xff0c;回顧高速部署挑戰&#xff0c;并重點介紹各種連接器設計策略&#xff0c;以防止失真和降級。 了解連接器信號完整性挑戰…

得物官網sign簽名逆向分析

打開得物官網&#xff0c;點擊鞋類&#xff0c;可以看到請求 直接搜sign function p(e) {return f()("".concat(e ? s()(e).sort().reduce(function(t, n) {return "".concat(t).concat(n).concat(e[n])}, "") : "", "048a9…

Ubuntu 安裝WPS Office

文章目錄 Ubuntu 安裝WPS Office下載安裝文件安裝WPS問題1.下載缺失字體文件2.安裝缺失字體 Ubuntu 安裝WPS Office 下載安裝文件 需要到 WPS官網 下載最新軟件&#xff0c;比如wps-office_12.1.0.17900_amd64.deb 安裝WPS 執行命令進行安裝 sudo dpkg -i wps-office_12.1…

javaSE.判空包裝類

判空包裝類Optional&#xff0c;這個類可以很有效的處理空指針問題 空指針異常&#x1f447; 特判null&#x1f447; Optional類可以更加優雅地處理這種問題&#x1f447;&#x1f447; ofNullable&#x1f447; isPresent isEmpty &#x1f447; &#x1f447; 包裝之后&…

使用 vcpkg 構建支持 HTTPS 的 libcurl 并解決常見鏈接錯誤

適用環境&#xff1a;Windows 10/11 Visual Studio 2022 CMake ≥ 3.20 目標讀者&#xff1a;希望在 C 項目中輕松調用 HTTPS&#xff08;GET/POST/PUT/DELETE&#xff09;&#xff0c;又被 LNK20xx 鏈接錯誤困擾的開發者 目錄 為什么選 vcpkg 與 libcurl用 vcpkg 安裝帶 SS…