HarmonyOS

鸿蒙系统开发初学记录


基础

<h3>前言</h3> <ul> <li>2019年8月9日: HarmonyOS 1.0</li> <li>2020年9月10日: HarmonyOS 2.0</li> <li>2022年11月4日: HarmonyOS 3.0 DeveloperPreview</li> <li>2023年8月4日: HarmonyOS 4.0 = AOSP + HMS + OpenHarmony</li> <li>2024年: HarmonyOS Next = HMS + OpenHarmony</li> </ul> <p>&gt; 名称解释 &gt; OpenHarmony:内核,已开源 &gt; HarmonyOs:操作系统,华为商用系统</p> <ul> <li>ArkTs:基于TypeScript基础上扩展声明式UI、状态管理等相应能力的一门编程语言</li> <li>ArkUI:是一套构建分布式应用界面的声明式UI开发框架</li> </ul> <h3>环境搭建</h3> <ul> <li>安装编辑器 -- node.js -- ohpm -- HarmonyOS SDK</li> </ul> <h3>创建项目</h3> <ul> <li>开发模型 -- Stage(推荐): Compile SDK版本大于9,主推该模式开发,并且使用ArkTS语言 -- FA</li> <li>低代码开发(Enable Super Visual):拖拽进行页面布局,默认关闭</li> <li>预览页面功能介绍1 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=902c0f6e22925f338191e5fb388b2f4a&amp;amp;file=file.png" alt="" /></li> <li>预览页面功能介绍2 <img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=a6da97ab69644ac214e2ebdd8e57b9fa&amp;amp;file=file.png" alt="" /></li> <li>真机运行 --&gt; 开启开发者模式,与android手机雷同 --&gt; 项目签名</li> </ul> <h3>基础知识</h3> <ul> <li>布局 <pre><code>@Entry //声明这个组件可作为页面入口,即在 UIAbility 中加载或进行页面跳转 @Component //声明这是一个UI组件 struct MainPage{ /*@State代表**/ @State title: string = &amp;quot;&amp;quot; build(){//声明布局 //如果被@Entry修饰的组件内部必须有一个根容器组件 } }</code></pre></li> <li>资源访问:$r('app.media.{filename}')、 $rawfile('{filename}.png')</li> <li>属性方法:设置控件大小尺寸、字体大小颜色等</li> <li>事件方法:点击事件、长按事件等 <pre><code>Buttion(&amp;quot;确定&amp;quot;) .onClick(() =&amp;gt; {}) .onClick(function(){}.bind(this))</code></pre></li> <li>容器组件 <pre><code>Row(space: 10){ //横向布局 } Column(space: 10){ //竖向布局 }</code></pre></li> <li>基础组件 <pre><code>Text('文本组件') .decoration(type: TextDecorationType.LineThrough) //设置横穿线</code></pre></li> <li>样式 <pre><code>*********************重用基础样式********************* 方式一:内部(优先级更高),只能设置通用样式,且不能传参 @Styles commonStyle(){ .width(&amp;quot;100%&amp;quot;) .height(&amp;quot;100%&amp;quot;) .backgroundColor(Color.Gray) } 方式二:外部,只能设置通用样式 @Styles function commonStyle(){ .width(&amp;quot;100%&amp;quot;) .height(&amp;quot;100%&amp;quot;) .backgroundColor(Color.Gray) } 使用 Column(){ ... }.commonStyle() *********************扩展组件样式********************* @Extend(Text) function textSytle(size: number, color: Color|string){ //内部还可以调用其他扩展组件样式函数 .fontSize(size) .fontColor(color) } 使用 Text().textSytle(14, Color.Pink) Text().textSytle(14, &amp;quot;#333333&amp;quot;)</code></pre></li> <li>自定义构建函数 <pre><code>@Component struct ListView{ name: string = &amp;quot;&amp;quot; build(){ Column(){ this.itemView1(name) this.itemView2(name) } } //方式一:只能被当前ListView这个组件调用 @Builder itemView1(context: string){ Text(content) } } //方式二:可被多组件共同调用 @Builder function itemView2(context: string){ Text(content) }</code></pre></li> <li><strong>状态修饰符(数据驱动UI更新)</strong> <pre><code>@Entry @Component struct MainPage{ @State title: string = &amp;quot;原生标题&amp;quot; build(){ TitleBar(this.title) .onClick(() =&amp;gt; { this.title = &amp;quot;改变的标题&amp;quot; }) } } @Component struct TitleBar{ title: String = &amp;quot;&amp;quot; build(){ Text(this.title).setPadding(12) .width(&amp;quot;100%&amp;quot;) } }</code></pre></li> <li>页面路由跳转 <pre><code>//路由跳转 router.pushUrl({ url: &amp;quot;路由地址&amp;quot;, //最好到main.pages.json中去复制 parmas: { key: value } }) //路由返回 router.back() //路由获取参数 router.getParmas()[key]</code></pre></li> <li>权限申请 -- 在module.json5文件中配置如下 <pre><code>{ &amp;quot;module&amp;quot;:{ ... &amp;quot;requestPermissions&amp;quot;: [ &amp;quot;name&amp;quot; : &amp;quot;ohos.permission.INTERENT&amp;quot; ] } }</code></pre></li> <li><strong>存储</strong></li> </ul>

页面列表

ITEM_HTML