鸿蒙OS应用开发之最简单的程序

鸿蒙OS应用开发之最简单的程序

前面介绍怎么样安装鸿蒙应用开发的环境,然后试着运行起来,并安装运行的虚拟机,以及对应9.0版本的API和SDK等软件。这样就具备了基本的开发基础,就可以进入创建应用程序开发了。

在我们起飞之前,先要来理解鸿蒙APP的基本组成,也就是这个APP主要长得怎么样,要对它比较了解。这是学习任何系统应用开发的第一步,统称为Hello World程序。在这里不会例外,我们还是需要通过一个Hello World程序来了解整个开发环境,以及程序的基本组成,然后才能深入去学习开发语言的语法,以及相关的API功能,再在这个基础之上进行客户的需求开发,比如定制一个企业打卡软件,又或者开发一个即时通讯软件等等。

从前面我们学会创建一个Hello World程序,如果还不会,就要回过头去看前面的文章。因为这里会继续前面的内容,看到创建程序如下:

从开发界面来看,左边就是工程文件的树形显示,如果刚从这里来看,是比较复杂的,无论是谁也不能一下子就搞懂它们,所以先放下来,知道它是构成工程文件即可,主要来看右边窗口的文件,在这里显示的是Index.ets文件,这个文件才是我们主要关心的,它是后面修改界面和改变显示内容的关键代码。

如果第一眼看这些代码,也是搞不懂的它的,因为它是一种特殊的方式,与以往的开发语言不一样。因此要先从这个简单的代码开始,我们把每一行代码都来搞懂它。

我们来把它们隐藏起来,就会看到只剩下三行代码:

这三行代码,让我们这种新手看起来,就容易多了。

先看第一行代码@Entry,这行代码是比较奇怪,与一般的C代码或c++代码有差别,主要它是一个@字符开头,这是表示什么意思呢?如果你学习过Python语言,或许就有印象,它是表示一个装饰器的开头,这个装饰器的名称叫做Entry。@Entry表示该自定义组件为入口组件,这里包含了应用程序的入口,也就是应用程序运行之后最先运行的代码就在这里。

接着我们来看第二行代码@Component,从前面分析可知,它也是一个装饰器,这个装饰器的名称叫做Component。@Component表示自定义组件,表示后面这些内容是自己定义的组件,也就是我们自己写的代码,叫做自定义。

装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。

在这里定义了一个组件的名称叫做Index,它是一个struct结构体。也就是第三行代码的意义。所以到这里,我们就明白了鸿蒙应用就是一个自定义的组件。struct:自定义组件基于struct实现,struct + 自定义组件名 + {...}的组合构成自定义组件,不能有继承关系。对于struct的实例化,可以省略new。

我们来把这个自定义组件进行展开:

这个结构体里是使用一个大括号包含,里面定义了一个消息变量和一个系统组件build()。先来看消息变量这行:

@State message: string = 'Hello World'

前面使用一个@State来定义,从前面来看 ,只要@开头的就是装饰器,它是一个状态更新的装饰器。@State表示组件中的状态变量,状态变量变化会触发UI刷新。其作用就是当字符串变量string 改变时,就通知界面进行刷新,这样才能实时地查看到字串内容的变化。在这里,把这个变量赋值为'Hello World'字符串。

接着下来,就是build()方法,它是一个系统定义组件的方法,这个方法必须要实现,相当于自定义组件的虚函数,如果不实现这个方法,就会编译失败。它是来自@Component组件里,具体可以查看它的代码和文档。所有声明在build()函数的语言,我们统称为UI描述语言。@Component装饰器仅能装饰struct关键字声明的数据结构。struct被@Component装饰后具备组件化的能力,需要实现build方法描述UI,一个struct只能被一个@Component装饰。

在build()方法里其实只有一行代码,它就是Row()方法。这个也是系统组件的内容,它在这里进行嵌套使用了。Row()表示进行一列显示。在这一列里再进行一行显示,所以定义了Column()方法。

接着下来我们会发现在Row()组件后面带有一对括号,但在括号后面又带有一个属性,如下图:

可以看到有一个句号后面带着height('100%'),这种表示方法叫做链式属性设置,意思就是说Row(){}是返回一个对象,而这个对象就可以设置属性。

属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。

在这里height('100%')的意思就是表示这一行占整个屏幕所有高度,就是100%。如果只想占用一半,就可以设置为50%。

设置为100%的显示如下:

如果设置为50%,显示如下:

可以看到整个字符串往上移动了,因为它只占用上面的50%的空间。

到这里,我们就分析这一行显示的代码完成了,接着下来我们来看一下这一行里显示的代码,如下:

      Column() {

        Text(this.message)

          .fontSize(50)

          .fontWeight(FontWeight.Bold)

      }

      .width('100%')

可以仔细地看一下代码,发现Column()组件,也是系统组件,它是表示一列的意思,如果一行里要显示多列,就可以创建多个Column()组件。这个组件也是可以设置它的宽度,通过链式方法.width('100%')来设置。

在一列里使用了Text()组件来输出一串字符串,字符串this.message就是前面定义的字符串Hello World,这里使用this对象来限定了本对象的声明变量。Text()组件后面使用链式表示来设置字体显示大小为50,字体精细为粗体。

到这里,我们就把这个最简单的应用程序分析完成了。现在来总结一下,整个应用程序的结构如下:

装饰器: 用于装饰类、结构、方法以及变量,并赋予其特殊的含义。如上述示例中@Entry、@Component和@State都是装饰器,@Component表示自定义组件,@Entry表示该自定义组件为入口组件,@State表示组件中的状态变量,状态变量变化会触发UI刷新。

UI描述:以声明式的方式来描述UI的结构,例如build()方法中的代码块。

自定义组件:可复用的UI单元,可组合其他组件,如上述被@Component装饰的struct Hello。

系统组件:ArkUI框架中默认内置的基础和容器组件,可直接被开发者调用,比如示例中的Column、Text、Divider。

属性方法:组件可以通过链式调用配置多项属性,如fontSize()、width()、height()、backgroundColor()等。

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

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

相关文章

idea使用maven的package打包时提示“找不到符号”或“找不到包”

介绍:由于我们的项目是多模块开发项目,在打包时有些模块内容更新导致其他模块在引用该模块时不能正确引入。 情况一:找不到符号 情况一:找不到包 错误代码部分展示: Failure to find com.xxx.xxxx:xxx:pom:0.5 in …

报错处理集

这个报错处理集的错误来源于编译arm平台的so文件产生的。但是后续可以补充成linux一个大的错误处理集。 文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据总结 前言 第一次整理的时间是2023年12月8日10:05:59,以下错误来源于欧拉系统编译…

数字人知识库:Awesome-Talking-Head-Synthesis

数字人知识库:Awesome-Talking-Head-Synthesis 文章目录 数字人知识库:Awesome-Talking-Head-SynthesisDatasetsSurveyAudio-drivenText-drivenNeRF & 3DMetricsTools & SoftwareSlides & Presentations Gihub:https://github.co…

查看电脑cuda版本

1.找到NVODIA控制面板 输入NVIDIA搜索即可 出现NVIDIA控制面板 点击系统信息 2.WINR 输入nvidia-smi 检查了一下,电脑没用过GPU,连驱动都没有 所以,装驱动…… 选版本,下载 下载后双击打开安装 重新输入nvidia-smi 显示如下…

Python函数默认参数设置

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值,这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。 为形参指定默认值的语法格式如下: 形参名 默认值 从上面的语法格式可以看出&…

Java实现布隆过滤器

一、概述 布隆过滤器本质上是一个很长的二进制数组,主要用来判断一个数据存不存在数组里,如果存在就用1表示,不存在用0表示,它的优点是空间效率和查询时间都比一般的算法要好的多,缺点是有一定的误识别率和删除困难。 …

【Python系列】Python函数

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

uni-app 微信小程序之好看的ui登录页面(一)

文章目录 1. 页面效果2. 页面样式代码 更多登录ui页面 uni-app 微信小程序之好看的ui登录页面(一) uni-app 微信小程序之好看的ui登录页面(二) uni-app 微信小程序之好看的ui登录页面(三) uni-app 微信小程…

经纬恒润以太网网关,智能时代网络通关

汽车产业新四化步伐持续加速,智能网联逐渐成为整车标配,随着近年来相关政策频出以及对网联需求和功能的深度挖掘与发展,中国本土市场及本土供应商在这场新浪潮中逐渐走向C位。经纬恒润深耕智能网联领域多年,先后推出四代网关产品&…

JavaSE基础50题:18. 写一个递归方法,输入一个非负整数,返回组成它的数字之和。例如:输入1729,则应该返回1+7+2+9,它的和是19

概述 写一个递归方法&#xff0c;输入一个非负整数&#xff0c;返回组成它的数字之和。例如&#xff1a;输入1729&#xff0c;则应该返回1729&#xff0c;它的和是19。 代码 public class P18 {public static int func(int n) {if (n < 10) {return n;}return n%10 func…

文章解读与仿真程序复现思路——中国电机工程学报EI\CSCD\北大核心《考虑气电联合需求响应的气电综合能源配网系统协调优化运行》

这个标题涉及到一个涉及气体&#xff08;天然气&#xff09;和电力的综合能源配网系统&#xff0c;并且强调了考虑气电联合需求响应的协调优化运行。让我们逐步解读&#xff1a; 气电综合能源配网系统&#xff1a; 这指的是一个结合了气体&#xff08;通常是天然气&#xff09;…

【Java数据结构 -- List和ArrayList与顺序表】

List和ArrayList与顺序表 一. List1.1 List介绍2.1 常见接口介绍3.1 List的使用 二. ArrayList与顺序表1.线性表2.顺序表2.1 接口的实现 3.ArrayList简介4. ArrayList使用4.1 ArrayList的构造 4.2 ArrayList常见操作4.3 ArrayList的遍历4.4 ArrayList的扩容机制5. ArrayList的具…

芯科科技领先无线技术助力控客赋能智慧亚运村

采用芯科科技MG21无线SoC的控客智能家居解决方案为杭州亚运会媒体村打造智能、舒适、便捷、安全的生活体验 中国&#xff0c;北京 - 2023年12月4日 – 致力于以安全、智能无线连接技术&#xff0c;建立更互联世界的全球领导厂商Silicon Labs&#xff08;亦称“芯科科技”&…

名创优品出海更难了,Q3净利增速放缓

近日&#xff0c;有媒体报道称&#xff0c;名创优品受市场流传针对公司的做空报告&#xff0c;叠加高管团队两次减持&#xff0c;共计180万股&#xff0c;若对应25美元的价格&#xff0c;则达4500万美元(约3.2亿元)。 12月5日&#xff0c;其港股收盘股价下跌14.04%&#xff1b…

Javascript 函数介绍

Javascript 函数介绍 很多教程书一上来就讲解一堆语法&#xff0c;例如函数定义、函数调用什么。等读者看完了函数这一章都没搞懂什么是函数。 在讲解什么叫函数之前&#xff0c;我们先看下面一段代码&#xff1a; <!DOCTYPE html> <html xmlns"http://www.w3.…

文心一言 VS 讯飞星火 VS chatgpt (152)-- 算法导论12.2 8题

八、用go语言&#xff0c;证明&#xff1a;在一棵高度为 h 的二叉搜索树中&#xff0c;不论从哪个结点开始&#xff0c;k 次连续的 TREE-SUCCESSOR 调用所需时间为 O(kh)。 文心一言&#xff1a; 要证明在一棵高度为 h 的二叉搜索树中&#xff0c;不论从哪个结点开始&#xf…

VSCODE 运行C程序缓慢解决方法之一

最近更换了mingw的版本&#xff0c;安装路径与之前的mingw路径不大一样。结果发现代码运行的时候很慢&#xff0c;弹出窗口后&#xff0c;迟迟没有打印任何东西&#xff0c;就像卡死了一样。试过网上说的一堆方法&#xff0c;没有什么用。 我按照以下流程进行检查: 1.检查min…

地震反演基础知识3

文章目录 地震勘探原理1 地震波1. 1 地震波概念1. 2 波的传播1. 2. 1 波传播的基本原理1. 2. 2 地震波的反射,折射,透射的1. 2. 3 地震子波&#xff08;seismic wavelet&#xff09;1. 2. 4 地震合成记录 2 地震时距曲线2.1 地震时距曲线作用2.2 不同波的时距曲线2.2.1 直达波时…

【Jeecg Boot 3 - 保姆级】第1节 docker + redis + nginx + redis一键安装启动

一、前言 ▶ JEECG-BOOT 开源版难以吃透的原因 ▶ 为了针对上面痛点&#xff0c;笔者做了如下安排 ▶ 你能收获什么 二、效果(第一节效果) ▶ 启动后端 &#xff1e; 日志 &#xff1e; 接口文档 ▶ 启动前端 三、准备工作 四、实战 ▶ 1、服务器安装 Stag…

2024年甘肃省职业院校技能大赛信息安全管理与评估赛项二三阶段样题一

2024年甘肃省职业院校技能大赛高职学生组电子与信息大类信息安全管理与评估赛项样题一 第二阶段 任务书 任务描述 随着网络和信息化水平的不断发展&#xff0c;网络安全事件也层出不穷&#xff0c;网络恶意代码传播、信息窃取、信息篡改、远程控制等各种网络攻击 行为已严重…