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

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.xdnf.cn/news/18805.html

相关文章:

  • 7、prefix-tuning、P-tuning、Prompt-tuning
  • 基于数据安全的旅游民宿租赁系统
  • 音频时长裁剪工具:高效处理音频,让内容创作更轻松
  • docker 所有常用命令,配上思维导图,加图表显示
  • 配送算法16 A Deep Reinforcement Learning Approach for the Meal Delivery Problem
  • 【Linux】用户与用户组管理
  • 【C语言强化训练16天】--从基础到进阶的蜕变之旅:Day14
  • 蓝桥杯算法之基础知识(3)——Python的idle的快捷键设置(idle改键)
  • OpenCV实战1.信用卡数字识别
  • 极简风格PDF格式转换解决方案
  • 人工智能安全地图:将人工智能漏洞与现实世界的影响联系起来
  • Linux 系统核心调优:CPU、磁盘 I/O、网络与内核参数实战
  • Java全栈开发面试实录:从基础到实战的深度探索
  • 【AI算力平台】算力高效调度策略——GPU调度
  • Rust 登堂 之 函数式编程(三)
  • vagrant怎么在宿主机管理虚拟机镜像box(先搁置)
  • PyTorch生成式人工智能——PatchGAN详解与实现
  • LeetCode 438. 找到字符串中所有的字母异位词
  • 功能强大的PDF工具箱-- PDF补丁丁,v1.1.0.4657新版本,免费无广告,开箱即用版~
  • flutter专栏--dart基础知识
  • Android系统学习2——Android.Utils.Log模块讨论
  • [Maven 基础课程]Maven 是什么
  • Java微服务AI集成指南:LangChain4j vs SpringAI
  • imx6ull-驱动开发篇43——I.MX6U 的 I2C 驱动分析
  • 软件开发技术栈
  • 集成电路学习:什么是ResNet深度残差网络
  • LeetCode 2140. 解决智力问题
  • JavaScript常用的算法详解
  • 8.26网络编程——Modbus TCP
  • 【跨国数仓迁移最佳实践7】基于MaxCompute多租的大数据平台架构