鸿蒙期末总结
一、概念
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 | 导航栏悬浮在内容区上方(通常带背景色和阴影)。 |