二、探索HarmonyOS Next应用的入口:深度解析Index页面

简介: Index.ets是HarmonyOS Next开发者手册应用的入口页面,它展示了应用的主要导航结构和用户界面设计。本文将深入分析这个文件的代码结构、UI组件使用以及路由实现,帮助开发者理解HarmonyOS应用的基本构建模式。


项目源码已开源(持续更新中~~): https://gitcode.com/nutpi/HarmonyosNextCaseStudyTutorial

项目演示

注意: 项目需要再真机或模拟器中运行, 否则会出现部分图片无法展示的问题

一、概述

Index.ets是HarmonyOS Next开发者手册应用的入口页面,它展示了应用的主要导航结构和用户界面设计。本文将深入分析这个文件的代码结构、UI组件使用以及路由实现,帮助开发者理解HarmonyOS应用的基本构建模式。

二、文件结构分析

1. 导入声明

// 导入基础组件和路由
import {RouterType} from "../type/type"
import {pageRouter} from "../router/index"
import router from '@ohos.router';

这部分代码导入了三个关键模块:

  • RouterType:自定义的路由类型接口,定义了路由项的数据结构
  • pageRouter:预定义的路由配置数据,包含应用的主要导航项
  • router:HarmonyOS提供的路由服务,用于页面跳转

2. 组件声明

@Entry
@Component
struct IndexPage {
    // 阶段分类数据
    stageCategories: RouterType[] = pageRouter
    
    build() {
        // UI构建代码
    }
}
  • @Entry:标记此组件为页面入口
  • @Component:声明这是一个UI组件
  • stageCategories:组件的状态变量,类型为RouterType[],初始值为pageRouter

三、UI结构实现

1. 整体布局

Stack() {
    // 背景渐变
    Column()
        .width('100%')
        .height('100%')
        .backgroundColor('#F0F5FF') // 淡蓝色背景
        .justifyContent(FlexAlign.Center)
    // 主内容区
    Column({ space: 30 }) {
        // 标题和列表内容
    }
    .padding({ top: 30 })
    .height('100%')
}

页面使用Stack组件作为根容器,实现了层叠布局:

  • 第一层:全屏淡蓝色背景
  • 第二层:主内容区,包含标题和列表

这种布局方式使得背景和内容可以独立控制,同时实现视觉上的层次感。

2. 标题设计

// 标题
Text('HarmonyOS Next 开发者手册')
    .fontSize(32)
    .fontWeight(700)
    .foregroundColor('#005FF9') // 华为蓝主色
    .margin({ top: 50 })

标题使用Text组件,设置了:

  • 字体大小:32像素
  • 字体粗细:700(粗体)
  • 文字颜色:华为蓝主色(#005FF9)
  • 上边距:50像素

这样的设计使标题醒目且符合品牌特性。

3. 列表实现

// 阶段分类列表
List() {
    ForEach(this.stageCategories, (item: RouterType) => {
        ListItem() {
            // 列表项内容
        }.margin({ bottom: 16 })
    }, (item:RouterType) => item.stage)
}
.width('95%')

列表使用ListForEach组合实现:

  • List:提供列表容器
  • ForEach:遍历stageCategories数组,为每个项创建一个ListItem
  • 第二个参数(item:RouterType) => item.stage:提供唯一键值,优化渲染性能

4. 列表项设计

Row({ space: 20 }) {
    // 阶段图标
    Image(item.icon)
        .width(60)
        .height(60)
        .objectFit(ImageFit.Contain)
    // 阶段信息
    Column({ space: 8 }) {
        Text(item.stage)
            .fontSize(20)
            .fontWeight(500)
        Text(item.desc)
            .fontSize(14)
            .foregroundColor('#666')
    }.width('50%')
    // 导航按钮
    Button('进入')
        .width(80)
        .height(35)
        .backgroundColor('#005FF9')
        .foregroundColor('white')
        .borderRadius(18)
        .onClick(() => {
            router.pushUrl({ url: item.routePath });
        })
}
.padding({ left: 24, right: 24, top: 16, bottom: 16 })
.backgroundColor('white')
.borderRadius(16)
.justifyContent(FlexAlign.SpaceBetween)

每个列表项使用Row布局,包含三个部分:

  1. 图标:使用Image组件显示阶段图标
  2. 文本信息:使用Column包含两个Text,分别显示阶段名称和描述
  3. 导航按钮:使用Button组件,点击时调用router.pushUrl进行页面跳转

列表项的样式设计包括:

  • 白色背景
  • 圆角边框
  • 内边距
  • 均匀分布的子元素(通过justifyContent(FlexAlign.SpaceBetween)实现)

四、路由实现分析

1. 路由数据结构

// 来自type.ets
export interface RouterType{
    stage: string;     // 阶段名称
    desc: string;      // 阶段描述
    icon: string;      // 阶段图标
    routePath: string; // 二级页面路由路径
}

RouterType接口定义了每个导航项需要的数据:

  • stage:阶段名称,如"萌新小白"
  • desc:阶段描述,如"掌握HarmonyOS基础"
  • icon:图标资源路径
  • routePath:目标页面的路由路径

2. 路由数据配置

// 来自router/index.ets
export const pageRouter:RouterType[] = [
    {
        "stage": "萌新小白",
        "desc": "掌握HarmonyOS基础",
        "icon": "common/assect/icon_basic.png",
        "routePath": "pages/secondPage/BasicCaseList"
    },
    {
        "stage": "登堂入室",
        "desc": "深入学习HarmonyOS  ",
        "icon": "common/assect/icon_advanced.png",
        "routePath": "pages/secondPage/AdvancedCaseList"
    },
    {
        "stage": "进阶高手",
        "desc": "精通HarmonyOS的高级功能开发 ",
        "icon": "common/assect/icon_hybrid.png",
        "routePath": "pages/secondPage/HybridCaseList"
    }
]

pageRouter数组包含三个导航项,分别对应三个学习阶段,每个阶段都有对应的图标和目标页面。

3. 路由跳转实现

Button('进入')
    // 样式属性...
    .onClick(() => {
        router.pushUrl({ url: item.routePath });
    })

路由跳转通过router.pushUrl方法实现,传入目标页面的URL。这种方式会将当前页面保留在导航栈中,用户可以通过返回按钮回到首页。

五、该项目的主要架构思维

1. 组件化思想

Index页面展示了HarmonyOS的组件化开发思想:

  • 使用@Component创建可复用的UI组件
  • 组件内部管理自己的状态和布局
  • 通过属性和事件与外部交互

2. 声明式UI

ArkTS的声明式UI使代码更加直观:

  • UI结构通过嵌套组件清晰表达
  • 样式通过链式调用直接附加到组件上
  • 事件处理通过.onClick()等方法直接绑定

3. 数据与UI分离

代码展示了良好的关注点分离:

  • 数据定义在单独的类型文件中
  • 路由配置在专门的路由文件中
  • UI组件专注于渲染和交互

六、总结

本项目主要通过主页面来层层递进,初版设计的比较low, 后面有机会在优化吧~~

目录
打赏
0
0
0
0
46
分享
相关文章
鸿蒙NEXT时代你所不知道的全平台跨端框架:CMP、Kuikly、Lynx、uni-app x等
本篇基于当前各大活跃的跨端框架的现状,对比当前它们的情况和未来的可能,帮助你在选择框架时更好理解它们的特点和差异。
112 0
纯血鸿蒙NEXT即时通讯/IM系统:RinbowTalk正式发布,全源码、纯ArkTS编写
RainbowTalk是一套基于MobileIMSDK的产品级鸿蒙NEXT端IM系统,目前已正式发布。纯ArkTS、从零编写,无套壳、没走捷径,每一行代码都够“纯”(详见:《RainbowTalk详细介绍》)。 MobileIMSDK是一整套开源IM即时通讯框架,历经10年,超轻量级、高度提炼,一套API优雅支持 UDP 、TCP 、WebSocket 三种协议,支持 iOS、Android、H5、标准Java、小程序、Uniapp、鸿蒙NEXT,服务端基于Netty编写。
117 1
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
本文介绍在三层架构中实现模块依赖的步骤。首先在产品定制层(features)的oh-package.json5文件中导入共享包依赖,如"basic":"file:../../commons/basic"。然后在产品层(products)的配置文件中同时导入公共能力层和产品定制层的依赖,示例展示了如何添加"basic"和"my"两个依赖项。通过这些配置,三层架构的各模块之间建立了完整的依赖关系。
115 0
鸿蒙NEXT-鸿蒙三层架构搭建,嵌入HMRouter,实现便捷跳转,新手攻略。(2/3)
鸿蒙Next仓颉开发语言中的数据类型总结分享
仓颉语言数据类型包括多种数字类型(Int、Float)、字符串(String)、数组(Array、ArrayList、ObservedArrayList)及HashMap。数字类型区分长度和精度,数组支持固定与动态操作,HashMap用于存储键值对。适合开发者快速掌握仓颉基础数据结构。#仓颉 #HarmonyOS
详解鸿蒙Next仓颉开发语言中的全屏模式
仓颉开发语言实现全屏模式教程:默认非全屏,需手动设置沉浸模式以占满屏幕。通过`setWindowLayoutFullScreen`开启全屏,并利用`getWindowAvoidArea`获取摄像头与导航条区域高度,结合AppStorage保存尺寸,适配界面布局,避免内容被遮挡。附屏幕尺寸获取方法及单位说明。
鸿蒙Next仓颉语言开发实战教程:聊天列表
本文分享了 HarmonyOS 仓颉语言实现聊天页面布局的全过程,包括顶部导航栏、动态消息列表及底部输入框的设计与代码实现,详细讲解了上中下结构布局、消息方向区分、阴影设置等内容。
鸿蒙Next仓颉语言开发实战教程:消息列表
本教程分享了使用仓颉语言开发商城应用中的消息列表页面,包含导航栏布局、消息筛选列表及消息内容列表的实现。通过Row、Scroll、List和ForEach等组件,完成页面结构搭建与数据循环渲染,适合初学者实战练习。
鸿蒙Next仓颉语言开发实战教程:设置页面
本教程介绍了仓颉语言商城应用设置页面的开发,重点讲解了List容器的使用。页面分为三组列表内容,第一组直接使用ListItem实现,后两组通过ListItemGroup及自定义组件setrow完成布局。教程还演示了如何通过自定义组件提升代码复用性,并介绍了分割线divider的设置方法,帮助开发者高效构建美观的设置界面。
鸿蒙Next仓颉语言开发实战教程:订单列表
本文介绍了使用仓颉语言开发HarmonyOS商城应用的订单列表页实现方法,包含导航栏、订单类型切换和订单列表展示三部分。通过代码示例讲解了布局技巧与组件使用,适合初学者学习参考。
鸿蒙Next仓颉语言开发实战教程:下拉刷新和上拉加载更多
本文介绍了在仓颉开发语言中实现下拉刷新和上拉加载更多的方法。通过Refresh组件实现下拉刷新,结合Timer模拟网络加载;并通过监听列表滚动事件,在列表底部添加加载动画实现上拉加载更多功能。代码示例清晰实用,适用于商城等含列表交互的移动应用开发。
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等