news 2026/3/11 14:42:17

鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战

鸿蒙APP开发从入门到精通:ArkUI组件库详解与常用组件实战

鸿蒙(HarmonyOS NEXT)是华为推出的分布式操作系统,其APP开发框架以ArkUI为核心,采用ArkTS(基于TypeScript的扩展语言)进行声明式开发。这种范式类似于React/Vue,强调UI组件的组合和状态驱动。ArkUI组件库是构建鸿蒙APP UI的核心,提供丰富的内置组件,支持自定义和扩展。

本教程从入门精通,基于HarmonyOS NEXT(2025-2026最新版),结合官方文档和开发者实践。假设你有JavaScript/TypeScript基础。代码可在DevEco Studio(华为官方IDE)中运行。安装DevEco Studio:从华为开发者官网下载,配置SDK(API Level 12+)。

目标:看完后,你能独立构建一个简单鸿蒙APP,并掌握ArkUI 90%的常用场景。

第一步:鸿蒙APP开发入门(快速上手)

1.1 环境搭建

  • 下载DevEco Studio:官网(developer.harmonyos.com),支持Windows/macOS/Linux。
  • 创建项目:New Project → Empty Ability → ArkTS(声明式)。
  • 项目结构
    entry ├── ets // ArkTS源码 │ ├── entryability // 入口Ability │ │ └── EntryAbility.ts │ └── pages // 页面组件 │ └── Index.ets // 默认首页 ├── resources // 资源文件(图片、字符串) └── oh-package.json // 依赖配置
  • 运行:连接真机/模拟器(需鸿蒙设备),点击Run。

1.2 ArkUI核心理念

  • 声明式开发:用@Entry、@Component描述UI结构,非命令式(如Android View)。
  • 组件树:UI由组件嵌套组成,支持状态管理(@State/@Prop)。
  • 生命周期:build()渲染UI,aboutToAppear()初始化。
  • ArkTS语法:类似TS,但添加装饰器如@Builder、@Extend。

入门代码(Index.ets):

import{Column,Text}from'@ohos.arkui';@Entry@Componentstruct Index{@Statemessage:string='Hello, HarmonyOS!';build(){Column(){Text(this.message).fontSize(24).fontColor(Color.Blue)}.width('100%').height('100%').justifyContent(FlexAlign.Center)}}
  • 运行后:屏幕居中显示蓝色文本。

第二步:ArkUI组件库详解(分类与原理)

ArkUI组件库分为基础组件容器组件媒体组件动画/交互组件等,共100+。基于声明式范式,组件是不可变的,状态变化触发重渲染。

2.1 组件分类速览表(2026主流)

分类典型组件作用与属性示例扩展点
基础组件Text, Button, Image, TextInput显示/交互;属性:fontSize, onClick, src@Extend 自定义样式
容器组件Column, Row, Stack, Flex, Grid布局子组件;属性:justifyContent, alignItems嵌套组合
列表/滚动List, GridList, Scroll, Swiper动态列表;属性:itemBuilder, direction数据绑定@ForEach
媒体/高级Video, Web, Chart, Progress多媒体/图表;属性:controller, data事件监听
交互/动画Toggle, Radio, Slider, Animator表单/动画;属性:checked, value, transition@Animate 动画
自定义@Component 结构体复用逻辑;属性:@Prop, @State继承/组合
  • 原理:ArkUI基于ArkCompiler编译为原生代码,高性能。组件支持响应式(@Watch状态监听)和数据绑定(@Link/@Provide)。
  • 样式系统:链式属性设置(如.fontSize(24)),支持主题(@Styles)和媒体查询。
  • 事件处理:onClick、onTouch等,支持冒泡/捕获。

2.2 关键特性

  • 状态管理:@State(本地状态)、@Prop(父传子)、@Link(双向绑定)。
  • 构建器:@Builder自定义渲染函数。
  • 性能优化:LazyForEach懒加载列表,避免全渲染。
  • 兼容性:支持鸿蒙API 10+,跨设备(手机/平板/手表)自适应。

第三步:常用组件实战(代码 + 解释)

下面挑选10大常用组件,每个提供实战代码(可复制到pages/NewPage.ets)。假设一个“Todo List” APP场景。

3.1 Text(文本组件)

  • 作用:显示文本,支持富文本(Span)。
  • 实战:动态欢迎语。
@Componentstruct WelcomeText{@Propname:string;build(){Text(`欢迎,${this.name}!`).fontSize(20).fontColor(Color.Green).backgroundColor(Color.LightGray).padding(10)}}

3.2 Button(按钮组件)

  • 作用:点击交互,支持类型(Capsule/Normal)。
  • 实战:提交按钮。
@Componentstruct SubmitButton{build(){Button('提交').type(ButtonType.Capsule).backgroundColor(Color.Blue).onClick(()=>{prompt('提交成功!');})}}

3.3 Image(图片组件)

  • 作用:显示本地/网络图片,支持动画。
  • 实战:头像显示。
Image($r('app.media.avatar'))// 本地资源.width(100).height(100).borderRadius(50).objectFit(ImageFit.Cover)

3.4 TextInput/TextArea(输入组件)

  • 作用:单行/多行输入,支持占位/验证。
  • 实战:Todo输入框。
@Statetodo:string='';TextInput({placeholder:'输入Todo'}).onChange((value:string)=>this.todo=value).margin(10)

3.5 Column/Row(线性布局)

  • 作用:垂直/水平排列子组件。
  • 实战:表单布局。
Column(){Text('用户名')TextInput()Text('密码')TextInput({type:InputType.Password})}.width('100%').padding(20).space(10)// 子项间距

3.6 Stack(层叠布局)

  • 作用:叠加子组件,如水印。
  • 实战:带加载的图片。
Stack(){Image('background.jpg')Progress({style:ProgressStyle.Circular}).visible(true)}.align(Alignment.Center)

3.7 Flex(弹性布局)

  • 作用:自适应排列,支持wrap。
  • 实战:按钮组。
Flex({direction:FlexDirection.Row,wrap:FlexWrap.Wrap}){Button('按钮1')Button('按钮2')Button('按钮3')}.justifyContent(FlexAlign.SpaceAround)

3.8 List/GridList(列表组件)

  • 作用:滚动列表,支持分组/懒加载。
  • 实战:Todo列表。
@Statetodos:string[]=['买菜','学习'];List(){ForEach(this.todos,(item:string)=>{ListItem(){Text(item)}},item=>item)}.divider({strokeWidth:1}).onItemClick((index:number)=>{this.todos.splice(index,1);})

3.9 Swiper(轮播组件)

  • 作用:滑动轮播,如banner。
  • 实战:图片轮播。
Swiper(){Image('img1.jpg')Image('img2.jpg')Image('img3.jpg')}.autoPlay(true).interval(3000).indicator(true)

3.10 Toggle/Radio(开关/单选)

  • 作用:布尔/选项选择。
  • 实战:主题切换。
@StateisDark:boolean=false;Toggle({type:ToggleType.Switch,isOn:this.isDark}).onChange((value:boolean)=>this.isDark=value)

第四步:综合实战——构建一个简单Todo APP

4.1 项目搭建

  • 创建新页面:TodoPage.ets。
  • 导入组件:import { Column, Text, TextInput, Button, List, ForEach } from ‘@ohos.arkui’。

4.2 完整代码

@Entry@Componentstruct TodoPage{@Stateinput:string='';@Statetodos:string[]=[];build(){Column(){Text('Todo List').fontSize(28).margin({bottom:20})Row(){TextInput({placeholder:'新Todo'}).flexGrow(1).onChange((value:string)=>this.input=value)Button('添加').margin({left:10}).onClick(()=>{if(this.input){this.todos.push(this.input);this.input='';}})}.margin({bottom:20})List(){ForEach(this.todos,(item:string,index:number)=>{ListItem(){Row(){Text(item).flexGrow(1)Button('删除').type(ButtonType.Circle).backgroundColor(Color.Red).onClick(()=>this.todos.splice(index!,1))}.padding(10)}},item=>item)}.height(300).divider({strokeWidth:1,color:Color.Gray})}.width('100%').height('100%').padding(20).backgroundColor(Color.White)}}
  • 运行效果:输入Todo,添加/删除列表,支持动态更新。
  • 扩展:添加存储(使用@ohos.data.preferences),或动画(@AnimateTo)。

第五步:进阶技巧与常见坑(精通之路)

  1. 性能优化:用LazyForEach大列表;避免深层嵌套。
  2. 自定义组件:用@BuilderParam复用UI片段。
  3. 事件冒泡:用.gesture()优先级处理触摸。
  4. 调试:DevEco Inspector查看组件树;日志用hilog。
  5. 坑点
    • @State变化触发全重绘,避免不必要更新。
    • 资源路径:$r(‘app.media.xxx’),别用相对路径。
    • 跨页传参:用router.pushUrl() + getParams。
  6. 生态:用Omni-UI组件库(开源,25+扩展组件)加速开发。

第六步:快速自测清单(验证掌握)

  1. ArkUI是命令式还是声明式?(声明式)
  2. Text组件如何设置颜色?(.fontColor(Color.Red))
  3. List如何动态渲染?(ForEach)
  4. Button的onClick回调是什么?(箭头函数)
  5. 如何创建自定义组件?(@Component struct)
  6. 状态如何双向绑定?(@Link)
  7. 布局中space属性作用?(子项间距)
  8. Swiper如何自动播放?(.autoPlay(true))

掌握这些,你已从入门到精通ArkUI!想深入某个组件(如动画/图表)或完整APP项目?直接告诉我,我再展开。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/11 14:10:59

【CTF Writeup】Reverse题型之恶意代码逆向分析入门

摘要 一、逆向工具准备 反编译工具:IDA Pro 7.7(32位/64位) 调试工具:x64dbg 辅助工具:Exeinfo PE(查看程序信息) 二、程序初步分析 2.1 查看程序信息 使用Exeinfo PE打开程序malware.ex…

作者头像 李华
网站建设 2026/3/11 14:41:52

Java计算机毕设之基于springboot的智慧生产安全系统基于SpringBoot的智慧工厂安全生产监督管理系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/3/11 7:48:04

Mermaid简记

文章目录 概述 什么是 Mermaid 核心子图类型 子图类型支持现状 Flowchart 语法 基础语法 基本概念 布局方向 节点定义 连接边类型 综合示例 高级语法 子图与嵌套 样式与交互 节点文本格式化 时序图与类图核心语法 时序图(Sequence Diagram) 类图(Class Diagram) 其他子图类…

作者头像 李华
网站建设 2026/3/11 9:29:23

学长亲荐2026TOP9AI论文软件:专科生毕业论文必备测评

学长亲荐2026TOP9AI论文软件:专科生毕业论文必备测评 2026年专科生论文写作工具测评:为何需要一份权威榜单? 随着AI技术的不断进步,越来越多的学术辅助工具被应用于论文写作中,尤其对于专科生而言,如何在…

作者头像 李华
网站建设 2026/3/2 18:59:50

【计算机毕业设计案例】基于springboot的植物养护系统基于SpringBoot+Vue的植物健康系统管理系统设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华