当前位置: 首页 > news >正文

3.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World

1.【鸿蒙应用开发实战: 从入门到精通】开发入门 Hello World

    • 1.1 前言
    • 1.2 创建一个新项目
      • 1.2.1 打开DevEco Studio
      • 1.2.2 点击 Create Project 创建项目
    • 1.3 遗留问题
    • 1.4 总结与开发建议
    • 1.5 结束语

1.1 前言

上篇博文【2.【鸿蒙应用开发实战: 从入门到精通】开发环境搭建】我们已经学习了如何在windows 系统或Mac系统上安装HarmonyOS应用开发工具DevEco Studio

本节内容将和大家一起学习如何构建一个全新的HarmonyOS应用,学习使用DevEco Studio创建新项目、使用预览器预览页面、了解基础组件如Image、Text等。

本文参考官方一手学习资料:开发入门:Hello World

1.2 创建一个新项目

接下来我们将使用DevEco Studio创建一个空项目,了解ArkUI模板代码和预览器的使用方法。

1.2.1 打开DevEco Studio

在这里插入图片描述

1.2.2 点击 Create Project 创建项目

通过如下两种方式,可以打开工程创建向导界面:

  • 如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择Create Project开始创建一个新工程。
    在这里插入图片描述
  • 如果已经打开了工程,可以在菜单栏选择File > New > Create Project来创建一个新工程。

在这里插入图片描述

  1. 点击Create Project按钮后,跳转至Create Project页面
  2. 左侧可以选择创建应用或创建元服务,这里选择创建应用Application。
    在这里插入图片描述
  3. 选择Empty Ability模板,然后单击Next,进入配置界面。

在这里插入图片描述
5. 由于我们是第一次学习,暂时保持全部默认即可,当然如果有需要也可以改下项目名称或代码保存路径。

在这里插入图片描述

注意事项:

  • 检查Bundle nameSave location是否与命名一致
    • 一般会根据Project name自行更新
    • 也可以根据需要自行更改。
  • DevEco Studio会默认勾选除CarTV以外的全部Device type,保持该选项即可
  • 鸿蒙应用开发设备类型详解:phone, tablet, 2in1, car, wearable, TV
设备类型 (Device Type)英文名 / 关键字典型设备举例屏幕与交互特点开发关注点与典型场景
手机phone华为Mate系列、P系列手机中等尺寸屏幕(5-7英寸),触摸为主,便携性强。功能全面,交互密集。需适配深色模式、全面屏、手势导航等。是大多数应用的主战场。
平板tablet华为MatePad系列大尺寸屏幕(~10英寸),触摸为主,支持手写笔和键盘。信息密度更高,适合分栏、拖拽交互。需利用大屏幕优势设计多窗口、平行视界等功能。
二合一平板2in1华为MateBook E屏幕尺寸与平板类似,但可作为笔记本电脑使用,通常带可拆卸键盘。兼具平板和笔记本特性。需适配多种使用模式:触摸模式、键鼠模式。UI应能灵活切换。
车机car华为鸿蒙座舱中控屏幕(多为横屏),语音交互优先,触控为辅。驾驶安全第一。界面元素要大且简洁,减少操作步骤。深度集成语音助手,支持多用户、多设备无缝流转:cite[7]。
智能穿戴wearable华为WATCH GT系列、智能手环小尺寸圆形/方形屏幕(~1.5英寸),触摸、按键、旋冠交互。轻量化、即时性。应用需极度简洁,显示最关键信息(健康、通知)。功耗优化至关重要。
智慧屏TV华为智慧屏系列超大尺寸屏幕(50+英寸),十英尺交互,遥控器、语音为主,新型智慧屏(如MateTV)支持更丰富的交互如悬浮触控、手写笔:cite[2]:cite[4]。远距离、沉浸式体验。UI布局要简单、清晰,焦点导航逻辑是核心。适配视频播放、大字体、远场语音等场景,并探索游戏、教育等新交互场景:cite[2]:cite[4]:cite[6]。
  1. 单击Finish,工具会自动生成示例代码和相关资源
  2. 等待工程创建完成,创建后界面如下图所示。
    在这里插入图片描述
  3. 在Project导航栏中选中 entry -> src -> main -> ets -> pages -> Index.ets,即可看到初始创建项目的模板代码。
@Entry
@Component
struct Index {# 静态常量 @State message: string = 'Hello World';build() {RelativeContainer() {# 通过Text组件展示一段文本 Text(this.message)# Text组件定义了组件标识id为HelloWorld,用于唯一指定组件。.id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})}.height('100%').width('100%')}
}
  • 其中,@Component装饰器装饰了struct关键字声明的数据结构Index
  • Index@Component装饰后具备组件化的能力,通过实现build方法描述UI
  • @Entry装饰的@Component将作为UI页面的入口。
  • 在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。
  • 界面由RelativeContainer相对布局容器作为根容器,RelativeContainer支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。
  • Text(this.message): 通过Text组件展示一段文本
  • 文本信息由@State装饰器装饰的状态变量message驱动。
  • Text组件定义了组件标识idHelloWorld,用于唯一指定组件。
  • 定义字体大小fontSize取值为$r('app.float.page_text_font_size')资源类型;
  • 定义文本的字体粗细fontWeight取值为Bold,即字体较粗。
  • 字体大小等数据的值一般存储在/entry/src/main/resources/base/element/float.json文件下,可以按照上文page_text_font_size的方式保存至float.json文件中,并通过$r('app.float.xxx')进行资源引用。
  • alignRules属性用于指定设置在相对容器中子组件的对齐规则,仅当父容器为RelativeContainer时生效,在这里定义Text组件横向居中和纵向居中。
  1. 开启右边栏的Previewer,预览器将工程中的@Entry作为实现入口,自动实现预览。
    在这里插入图片描述

此处需要选中@Entry所在的文件,预览器才能顺利打开。

  1. 接下来我们尝试修改message内容为"Hi,极客星云"
@Entry
@Component
struct Index {@State message: string = 'Hi,极客星云';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize($r('app.float.page_text_font_size')).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }}).onClick(() => {this.message = 'Welcome';})}.height('100%').width('100%')}
}

在这里插入图片描述

1.3 遗留问题

在这里插入图片描述
PS: 理论上应该支持模拟器或使用华为设备进行真机测试的,这个已反馈给他们等待后面更新吧。
在这里插入图片描述

1.4 总结与开发建议

  1. 资源查询与适配:在resources目录下使用media(图片/视频)、float(尺寸)、string(字符串)等限定词(如small, medium, large)来为不同设备提供差异化资源。

1.5 结束语

好了,到这里,我们基本上先对这个鸿蒙应用开发有一个整体的认识就行,下一节课我们详细讲解相关基础知识。

http://www.dtcms.com/a/352984.html

相关文章:

  • Linux程序管理
  • SyntaxError: Failed to execute ‘open‘ on ‘XMLHttpRequest‘: Invalid URL
  • Mybatis总结
  • 织梦会员中心模板调用某个栏目名和栏目下文档的办法
  • 神经网络学习笔记11——高效卷积神经网络架构SqueezeNet
  • SCANeR Studio 仿真数据获取和车辆座舱数据输入-手自动驾驶切换(二)
  • 混合RAG架构:下一代企业级检索增强生成的融合之道
  • AI-Agent 深度科普:从概念到架构、应用与未来趋势
  • 【软考架构】软件架构复用的过程
  • 2025年- H100-Lc208--912.排序数组(快速选择排序)--Java版
  • k8s-容器化部署论坛和商城服务
  • 筑牢上线前安全防线:安全运维服务中的检测实践与深化
  • 【电路笔记 通信】子载波的频域Sinc函数证明 OFDM 正交子载波证明 绘图示例
  • Spring Cloud 高频面试题详解(含代码示例与深度解析)
  • AutoGen 智能体框架教程
  • THM Smol
  • leecode-三数之和
  • 广告牌安全监测系统综合解决方案
  • Python 前后端框架实战:从选型到搭建简易全栈应用
  • 6 种无需 iTunes 将照片从 iPhone 传输到电脑
  • Spark学习记录
  • 数据结构第8章 排序(竟成)
  • OpenFOAM中梯度场的复用(caching)和生命期管理
  • 【微信小程序】分别解决H5的跨域代理问题 和小程序正常不需要代理问题
  • 利用python脚本从dockerhub上下载镜像,可以选择arm架构还是x86架构
  • 福建地区通信安全员考试题库及答案
  • 基于FPGA的情绪感知系统设计方案:心理健康监测应用(四)
  • FPGA入门学习路径
  • Go变量作用域全解析
  • Zynq介绍和命名方式