HarmonyOS应用开发快速入门

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

文章目录

    • 一、介绍
    • 二、创建一个新项目
    • 三、页面结构总览
    • 四、自定义文本视图
    • 五、创建Image组件

在这里插入图片描述
在这里插入图片描述


一、介绍

根据本教程【开发入门:Hello World】创建全新的项目。

根据教程中的提示使用01_Resources文件夹中的文件。

在这里插入图片描述

如果您想要自行探索,可以直接打开01_Complete文件夹中的项目并浏览代码。

项目文件下载

下载项目文件开始构建本项目,请根据以下步骤操作:

01_EnvironmentSetup.zip

二、创建一个新项目

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

1. 搭建开发环境:

  1. 安装DevEco Studio
  2. 设置DevEco Studio开发环境,DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用

2. 打开DevEco Studio,通过如下两种方式,打开工程创建向导界面:

如果当前未打开任何工程,可以在DevEco Studio的欢迎页,选择Create Project开始创建一个新工程。

在这里插入图片描述

如果已经打开了工程,可以在菜单栏选择File > New > Create Project来创建一个新工程。

在这里插入图片描述

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

在这里插入图片描述

4. 将Project name自定义为QuickStart。

在这里插入图片描述

检查Bundle name和Save location是否与命名一致,一般会根据Project name自行更新,也可以根据需要自行更改。

在这里插入图片描述
选择Compatible SDK为5.0.0(12),在编译构建时,DevEco Studio会根据指定的Compatible SDK版本进行编译打包。

在这里插入图片描述

其中,Compatible SDK需要跟随版本变化变更选择。

DevEco Studio会默认勾选除‘Car’以外的全部Device type,保持该选项即可。

在这里插入图片描述

5.单击Finish,工具会自动生成示例代码和相关资源。

在这里插入图片描述

等待工程创建完成,创建后界面如右图所示。

在这里插入图片描述

6. 在Project导航栏中选中 entry -> src -> main -> ets -> pages -> Index.ets,即可看到初始创建项目的模板代码。

@Entry
@Component
struct Index {@State message: string = 'Hello World';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.height('100%').width('100%')}
}

在这里插入图片描述

其中,@Component装饰器装饰了struct关键字声明的数据结构Index。Index被@Component装饰后具备组件化的能力,通过实现build方法描述UI。

@Component

@Entry装饰的@Component将作为UI页面的入口。在单个UI页面中,最多可以使用@Entry装饰一个自定义组件。

@Entry

界面由RelativeContainer相对布局容器作为根容器,RelativeContainer支持容器内部的子元素设置相对位置关系,适用于界面复杂场景的情况,对多个子组件进行对齐和排列。

  RelativeContainer() {}

通过Text组件展示一段文本

   Text(this.message)

文本信息由@State装饰器装饰的状态变量message驱动。

  @State message: string = 'Hello World';

Text组件定义了组件标识id为HelloWorld,用于唯一指定组件。

   .id('HelloWorld')

定义字体大小fontSize取值为50;定义文本的字体粗细fontWeight取值为Bold,即字体较粗。

   .fontSize(50).fontWeight(FontWeight.Bold)

alignRules属性用于指定设置在相对容器中子组件的对齐规则,仅当父容器为RelativeContainer时生效,在这里定义Text组件横向居中和纵向居中。

   .alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})

7. 开启右边栏的Previewer,预览器将工程中的@Entry作为实现入口,自动实现预览。

在这里插入图片描述

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

8. 修改APP的名称为“HMOS世界入门版”。修改entry/src/main/resources/base/element/string.json文件,将EntryAbility_label的value修改为“HMOS世界入门版”。

{"string": [{"name": "module_desc","value": "module description"},{"name": "EntryAbility_desc","value": "description"},{"name": "EntryAbility_label","value": "HMOS世界入门版"}]
}

在这里插入图片描述

9. 修改APP的图标。将01_Resources文件夹中的background.png和foreground.png图片进行复制粘贴到entry/src/main/resources/base/media文件夹中,将其中原本的background.png和foreground.png文件替换掉。
在这里插入图片描述

三、页面结构总览

创建好项目后,我们根据需要设计页面的结构进行分析,并确认页面的实现方式。

1. 抽象页面结构

我们想实现的页面效果如右图所示。

在这里插入图片描述

在右图中,我们将页面内的结构抽象三大部分。其中,第1部分为轮播图部分,第2部分为赋能套件部分,第3部分为入门教程部分。

在这里插入图片描述

轮播图部分:可自动播放、展示多张图片的组件,命名为Banner,每一个元素为BannerItem

在这里插入图片描述

赋能套件部分:横向可滑动的组件,命名为Enablement ,由多个EnablementItem组成。

在这里插入图片描述

入门教程部分:纵向可滑动的组件,命名为Tutorial ,由多个TutorialItem组成。

在这里插入图片描述

2. 选择布局实现页面

轮播图部分:Swiper组件提供滑动轮播显示的能力。

在这里插入图片描述
赋能套件部分:Grid组件为网格容器,由“行”和“列”分割的单元格所组成,其中容器内各条目对应一个GridItem组件。如果仅设置行、列数量与占比中的一个,网格单元将按照设置的方向排列,超出Grid显示区域后,Grid拥有可滚动能力。在这部分,可以设置单行显示,则赋能套件部分可以横向滑动。

在这里插入图片描述

入门教程部分:List容器可以轻松高效地显示结构化、可滚动的信息。当列表项达到一定数量,内容超过屏幕大小时,可以自动提供滚动功能。

在这里插入图片描述

接下来,我们将从最简单的步骤开始,一步步实现这个页面。

四、自定义文本视图

通过更改代码可以自定义视图,或者使用Inspector查询对应视图可更改的代码。 在设计布局时,DevEco Studio的Previewer工具可以实时提供反馈,以便观察代码如何转化为对应布局,反之,也可以根据布局效果调整代码。

1. 更改 @State 装饰器装饰的状态变量message文字,可以驱动视图的更新。

将’Hello World’修改为’快速入门’,这就是本应用程序中第一个页面的标题。可以看到,修改代码后,预览器会即时根据代码更新。

@Entry
@Component
struct Index {@State message: string = '快速入门';build() {RelativeContainer() {Text(this.message).id('HelloWorld').fontSize(50).fontWeight(FontWeight.Bold).alignRules({center: { anchor: '__container__', align: VerticalAlign.Center },middle: { anchor: '__container__', align: HorizontalAlign.Center }})}.height('100%').width('100%')}
}

在这里插入图片描述

此处修改的是文本内容,需要手动保存(ctrl+s)后,预览器才会更新;如果修改的是相关属性,则不需要手动保存,预览器也会更新。

2. 如右图所示,点击Previewer工具栏的Inspector工具开启Inspector,可以观察到当前组件树,并与预览器交互。

在这里插入图片描述

点击组件树的部件,或者直接点击预览器视图中的元素,代码编辑器会自动跳转并框选至对应的代码块,同时显示相关信息。

在这里插入图片描述

3. 调整文本视图。

修改fontSize属性为24,fontWeight属性为700。可以看到随着代码的修改,预览器中的视图和代码编辑器的代码也会随之改变。

在这里插入图片描述

4. 如右图所示,观察可得,页面整体布局沿垂直方向布局。

在这里插入图片描述

将根容器从RelativeContainer更改为Column。

Column容器可以使组件内的元素沿垂直方向布局。删除Text组件的alignRules属性,这是由于alignRules属性在Column容器中不生效。删除Text组件的id属性,因为不需要识别该组件。

@Entry
@Component
struct Index {@State message: string = '快速入门';build() {Column() {Text(this.message).fontSize(24).fontWeight(700)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}

在这里插入图片描述

为整体组件添加背景色,取值为’#F1F3F5’。

@Entry
@Component
struct Index {@State message: string = '快速入门';build() {Column() {Text(this.message).fontSize(24).fontWeight(700)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}

在这里插入图片描述

5. 手动编辑代码,将’快速入门’置于屏幕左上角。

修改文本与屏幕左侧边距,首先将Text组件宽度设置为占满屏幕(100%),并设置文本对齐属性为Start,文本在Text组件内会向左对齐。

   .width('100%').textAlign(TextAlign.Start)

在这里插入图片描述

设置文本左边距,padding属性可以设置内容器向内的边距,此处设置左边距(left)为16。

   .padding({ left: 16 })

设置fontFamily字体属性为’HarmonyHeiTi-Bold’,设置lineHeight行高属性为33。

   .fontFamily('HarmonyHeiTi-Bold').lineHeight(33)

HarmonyHeiTi-Bold字体为较粗的鸿蒙黑体,已在DevEco Studio中内置,直接使用即可。

五、创建Image组件

在上一节中,我们创建了标题视图,接下来需要使用Image组件添加图片。Previewer可以直接预览@Entry装饰器装饰的整个页面,也可以预览由@Preview装饰器装饰的单独组件。 本节中将学习如何单独预览组件视图,并将视图组合进整个页面。

1. 在当前Index.ets文件内建立一个命名为Banner的空组件,并用@Preview装饰器装饰,以便单独预览组件。

struct Index {@State message: string = '快速入门';build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width('100%').textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily('HarmonyHeiTi-Bold').lineHeight(33)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}@Preview
@Component
struct Banner {build() {}
}

2. 在Banner组件中添加图片。

首先,将01_Resources文件夹中的banner_pic1.png放置在entry -> src -> main -> resources -> base -> media路径下。

在这里插入图片描述

ArkUI提供了Image组件用于显示图片,此处使用$r(‘app.media. 文件名字’)的方式将media文件夹下的图片读取到Image组件内。

设置图片的填充效果为Contain模式,即保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。

@Entry
@Component
struct Index {@State message: string = '快速入门';build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width('100%').textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily('HarmonyHeiTi-Bold').lineHeight(33)}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}@Preview
@Component
struct Banner {build() {Image($r('app.media.banner_pic1')).objectFit(ImageFit.Contain)}
}

3. 预览Banner组件。

将预览器调整至组件预览模式,可以单独观察到组件的视图预览。值得注意的是,此时的Inspector是不可用状态。

在这里插入图片描述

4. 组合标题和图片视图。

在@Entry装饰器装饰的Index组件中引入Banner组件,放在Text的下方,使用预览器预览完整视图。

@Entry
@Component
struct Index {@State message: string = '快速入门';build() {Column() {Text(this.message).fontSize(24).fontWeight('700').width('100%').textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily('HarmonyHeiTi-Bold').lineHeight(33)Banner()}.height('100%').width('100%').backgroundColor('#F1F3F5')}
}@Preview
@Component
struct Banner {build() {Image($r('app.media.banner_pic1')).objectFit(ImageFit.Contain)}
}

在这里插入图片描述

5. 调整图片的属性以达到设计效果。

设置Image组件宽度为铺满整个屏幕

  .width('100%')

在这里插入图片描述

设置图片与标题和边框的边距。

padding属性可以设置内容器向内的边距,此处设置左右边距(left、right)为16,上边距(top)为11。

    .padding({ top: 11, left: 16, right: 16 })

在这里插入图片描述

设置图片四角的圆角值为16。

 .borderRadius(16)

在这里插入图片描述

至此,我们已经学会了如何自定义文本视图,以及使用Image组件加载资源文件展示图片。


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/9907.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ICSE‘25 LLM Assistance for Memory Safety

不知道从什么时候开始,各大技术社区,技术群聊流行着 “用Rust重写!” ,放一张图(笑死… 这不, 随着大模型技术的流行,大家都在探索如何让大模型自动完成仓库级别(全程序)的代码重构,代码变换(Refactor&…

Java实现.env文件读取敏感数据

文章目录 1.common-env-starter模块1.目录结构2.DotenvEnvironmentPostProcessor.java 在${xxx}解析之前执行,提前读取配置3.EnvProperties.java 这里的path只是为了代码提示4.EnvAutoConfiguration.java Env模块自动配置类5.spring.factories 自动配置和注册Enviro…

基于Python的人工智能患者风险评估预测模型构建与应用研究(下)

3.3 模型选择与训练 3.3.1 常见预测模型介绍 在构建患者风险评估模型时,选择合适的预测模型至关重要。不同的模型具有各自的优缺点和适用场景,需要根据医疗数据的特点、风险评估的目标以及计算资源等因素进行综合考虑。以下详细介绍几种常见的预测模型。 逻辑回归(Logisti…

零基础Vue入门4——Vue3基础核心

本节重点: vue3最佳实践 ref reactive computed watch、watchEffect 讲解重点之后下面会带大家开发一个页面(表单表格),之后会有一个TodoList的小练习,文末附有小练习的代码参考。跟着练习一定带你可以上手开发vu…

一文掌握ADB的安装及使用

文章目录 一、什么是ADB?二、 安装ADB2.1 下载ADB2.2 配置环境变量 三、连接Android设备四、 常用ADB命令五、ADB高级功能5.1 屏幕截图和录制5.2 模拟按键输入5.3 文件管理5.4 系统设置管理5.5 系统操作指令5.6 日志操作指令5.7 APK操作指令5.8 设备重启和恢复 六、…

使用Edu邮箱申请一年免费的.me域名

所需材料:公立Edu教育邮箱一枚(P.S:该服务不支持所有的Edu教育邮箱,仅支持比较知名的院校) 说到域名,.me这个后缀可谓是个性十足,适合个人网站、博客等。.me是黑山的国家顶级域名(c…

7.抽象工厂(Abstract Factory)

抽象工厂与工厂方法极其类似,都是绕开new的,但是有些许不同。 动机 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。 假设案例 假设…

Visual Studio使用GitHub Copilot提高.NET开发工作效率

GitHub Copilot介绍 GitHub Copilot 是一款 AI 编码助手,可帮助你更快、更省力地编写代码,从而将更多精力集中在问题解决和协作上。 GitHub Copilot Free包含哪些功能? 每月 2000 代码补全,帮助开发者快速完成代码编写。 每月 …

[JavaWeb]搜索表单区域

一.注意事项 设置外边距:margin:(参数可省去部分)上 下 左 右 二.源代码 <!DOCTYPE html> <html lang"zh-CN"> <head> <meta charset"UTF-8"> <title>Tlias智能学习辅助系统</title> <style> /* 导航栏样…

NLP自然语言处理通识

目录 ELMO 一、ELMo的核心设计理念 1. 静态词向量的局限性 2. 动态上下文嵌入的核心思想 3. 层次化特征提取 二、ELMo的模型结构与技术逻辑 1. 双向语言模型&#xff08;BiLM&#xff09; 2. 多层LSTM的层次化表示 三、ELMo的运行过程 1. 预训练阶段 2. 下游任务微调 四、ELMo的…

Eureka 服务注册和服务发现的使用

1. 父子工程的搭建 首先创建一个 Maven 项目&#xff0c;删除 src &#xff0c;只保留 pom.xml 然后来进行 pom.xml 的相关配置 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xs…

OpenCV:二值化与自适应阈值

目录 简述 1. 什么是二值化 2. 二值化接口 2.1 参数说明​​​​​ 2.2 示例代码 2.3 运行结果 3. 自适应阈值 3.1 参数说明 3.2 示例代码 3.3 运行结果 4. 总结 4.1 二值化 4.2 自适应阈值 相关阅读 OpenCV&#xff1a;图像的腐蚀与膨胀-CSDN博客 简述 图像二值…

Java面试题2025-设计模式

1.说一下开发中需要遵守的设计原则&#xff1f; 设计模式中主要有六大设计原则&#xff0c;简称为SOLID &#xff0c;是由于各个原则的首字母简称合并的来(两个L算一个,solid 稳定的)&#xff0c;六大设计原则分别如下&#xff1a; 1、单一职责原则 单一职责原则的定义描述非…

Win11下帝国时代2无法启动解决方法

鼠标右键点图标&#xff0c;选择属性 点开始&#xff0c;输入启用和关闭

JAVA实战开源项目:在线文档管理系统(Vue+SpringBoot) 附源码

本文项目编号 T 038 &#xff0c;文末自助获取源码 \color{red}{T038&#xff0c;文末自助获取源码} T038&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…

Python设计模式 - 组合模式

定义 组合模式&#xff08;Composite Pattern&#xff09; 是一种结构型设计模式&#xff0c;主要意图是将对象组织成树形结构以表示"部分-整体"的层次结构。这种模式能够使客户端统一对待单个对象和组合对象&#xff0c;从而简化了客户端代码。 组合模式有透明组合…

算法每日双题精讲 —— 前缀和(【模板】一维前缀和,【模板】二维前缀和)

在算法竞赛与日常编程中&#xff0c;前缀和是一种极为实用的预处理技巧&#xff0c;能显著提升处理区间和问题的效率。今天&#xff0c;我们就来深入剖析一维前缀和与二维前缀和这两个经典模板。 一、【模板】一维前缀和 题目描述 给定一个长度为 n n n 的整数数组 a a a&…

VLLM性能调优

1. 抢占 显存不够的时候&#xff0c;某些request会被抢占。其KV cache被清除&#xff0c;腾退给其他request&#xff0c;下次调度到它&#xff0c;重新计算KV cache。 报这条消息&#xff0c;说明已被抢占&#xff1a; WARNING 05-09 00:49:33 scheduler.py:1057 Sequence gr…

知识管理系统塑造企业文化与学习型组织的变革之路

内容概要 知识管理系统&#xff08;Knowledge Management System, KMS&#xff09;是指组织内部为有效获取、存储、共享和应用知识而建立的结构和技术体系。这一系统不仅是信息技术的运用&#xff0c;更是推动企业文化和学习型组织发展的重要工具。在当今快速变化的商业环境中…

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展&#xff0c;针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击&#xff0c;包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …