HarmonyOS 鸿蒙Next开发学习笔记

发布于 1周前 作者 nodeper 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next开发学习笔记

在进行创作时,发现了刚学习harmonyOS开发时的笔记,这里发出来,希望能帮到大家

Day 1

一、学前准备

1、了解官网

OpenAtom OpenHarmony

cke_21110.png

2、进行下载

在导航栏中找到开发者,在其扩展栏中点击“了解OpenHarmony”

cke_21111.png

点开后,在右侧版本说明下找到最新的版本

cke_21112.png

cke_21113.png

向下滑动,在配套关系中找到DevEcho Studio,并选择对应版本进行下载

cke_23536.png

cke_23537.png

下载好后,双击安装,安装流程如下

cke_23538.png

cke_23539.png

cke_23540.png

cke_23541.png

随后,待安装完成之后,就可以在桌面上看见软件图标了

cke_23542.png

3、初始化

首次打开,会弹出一些页面

点击Agree

cke_28630.png

是否添加开发工具,选择Do not

cke_28631.png

第一行:如果本地已经安装了node,则选择local,否则选择install 第二行:用于安装鸿蒙包管理系统,选择install

cke_28632.png

包含了一些必备的工具,选择install

cke_28633.png

之后都选择NEXT,进入安装页面

cke_28634.png

安装完成后点击Finish

cke_28635.png

随后会看到此界面

cke_28636.png

点击左下角齿轮,选择setting

cke_28637.png

在列表中选择Plugins,点击installed,搜索chinese,在右侧勾选,并点击右下角OK,在点击Restart重启后便可以进入中文页面

cke_28638.png

cke_28639.png

4、项目创建

点击新建项目 —— 选择Empty Ability,Next —— 点击左下角蓝色文字进行SDK的安装

cke_34217.png

cke_34218.png

cke_34219.png

cke_34220.png

安装完成后,点击Finish,便成功进入编辑页面

cke_34221.png

cke_34222.png

二、ArkTS基础入门

1、认识和存储数据

1、基础数据类型
string:字符串
number:数字
boolean:布尔

2、存储数据 变量:使用let定义,语法为 let 变量名: 类型 = 值 常量:使用const定义,语法为 const 常量名: 类型 = 值

3、扩展 any:不确定类型 (可以根据所给的数据而修改)

2、数组

1、定义
let 数组名: 类型[] = [数据1,数据2.…]
let 数组名: Array<类型> = [数据1,数据2.…]

3、函数

1、定义
function 函数名(形参名: 类型){
//函数体    
}
2、调用
函数名()

4、箭头函数

1、定义
let 按数码 = () => {

}

2、调用 函数名()

5、对象

1、作用
用于描述一个物体的特征和行为,是一个可以存储多个数据的容器

2、定义 let 对象名称: 对象结构类型 = 值

<span class="hljs-number">2.1</span>、通过interface接口约定对象结构类型
    interface 接口名{
        属性<span class="hljs-number">1</span>: 类型<span class="hljs-number">1</span>
        属性<span class="hljs-number">2</span>: 类型<span class="hljs-number">2</span>        
    }
    如:
        interface Person{
            name: string
            age: number                                            
        }
        <span class="hljs-keyword">let</span> Person: Person = {
            name: <span class="hljs-string">'林钟雪'</span>,
            age: <span class="hljs-number">18</span>
        }
<span class="hljs-number">2.2</span>、方法
    <span class="hljs-comment">//一个对象内部提供的函数</span>
    interface 接口名{
        方法名:(参数: 类型) =&gt; 返回值类型        
    }
    如:
        interface Person{
            dance: () =&gt; <span class="hljs-keyword">void</span>
            sing: (song: string) =&gt; <span class="hljs-keyword">void</span>        
        }
        <span class="hljs-keyword">let</span> lzx: Person = {
            dance:() =&gt; {
                console.log(<span class="hljs-string">'321 jump'</span>)                
            },
            sing:(song.string) =&gt; {
                console.log(<span class="hljs-string">'唱首'</span>, song)                
            }            
        }
        lzx.dance()
        lzx.sing(<span class="hljs-string">'jump'</span>)</code></pre>  <h3 style="text-align: left;">6、联合类型</h3>  <pre style="position: relative;"><code class="language-javascript hljs "><span class="hljs-number">1</span>、定义
<span class="hljs-keyword">let</span> 变量名: 类型<span class="hljs-number">1</span> | 类型<span class="hljs-number">2</span> | 类型<span class="hljs-number">3</span>
<span class="hljs-comment">//可以存储所给出类型中的任意一种</span>

2、扩展 //联合类型还可以将变量值,约定在一组数据中进行选择 如: let gender: ‘man’ | ‘woman’ | ‘secret’ //此变量只能存储所给出的三种变量中的一种

7、枚举类型

1、说明
枚举可以约定遍历只能在一组数据范围内选择值,与联合类型不同的是,它既有值,也有属性名,适用于更加复杂的场景

2、定义 enum 枚举名{ 常量1 = 值, 常量2 = 值
} 如: enum ThemeColor{ red: ‘red’, green: ‘green’
} const color: ThemeColor = ThemeColor.red

三、界面开发

1、代码书写方式

代码块在build()方法中书写,在右侧预览中查看效果

cke_39472.png

2、界面开发-布局思路

1、ArkUI(方舟开发框架)
说明:是一套构建鸿蒙应用界面的框架
构建页面的最小单位就是“组件”
组件分类:
(1)基础组件:文字、图片、按钮等
(2)容器组件:Row行、Column列等

2、布局思路: 先排版,再放内容

3、组件语法 (1)容器组件:行Row、列Column 容器组件(){ //内容 } (2)基础组件(参数):文字Text、图片img、按钮button

3、组件的属性方法

1、语法
组件(){

}.方法<span class="hljs-number">1</span>(参数)
 .方法<span class="hljs-number">2</span>(参数)

2、属性方法 .width():宽度 .height():高度 .backgroundColor():颜色 .fontSize():字体大小 .fontWeight():字体粗细 .fontColor():字体颜色 .lineHeight(): 设置行高

4、文字溢出省略号、行高

1、文字溢出省略(设置文本超长时的显示方式)
语法:.textOverflow({
overflow: TextOverflow.XXX
//说明
//Ellipsis:隐藏
//Clip:裁剪
//MARQUEE:单行反复滚动
})
注:需要配合.maxLines(行数)使用
如:
Text(‘全部配套资源领取方式如下:方式1:访问黑马官网可下载:www.itheima.com?bz方式2:关注黑马程序员公众号,回复关键词:鸿蒙NEXT).textOverflow({
overflow: TextOverflow.Ellipsis
}).maxLines(2)

5、Image图片组件

1、语法
Image(图片数据源) 支持网络图片资源和本地图片资源

2、示例 Image(‘http…/logo.png’) //网络图片 Image($r(‘app.meida.文件名’)) //注:图片文件应该存储在resources - base - media下

cke_76008.png

6、输入框与按钮

一、输入框
1、语法
TextInput(参数对象)
.属性方法()

<span class="hljs-number">2</span>、参数对象
    <span class="hljs-number">2.1</span>、placeholder 提示文本

<span class="hljs-number">3</span>、属性方法
    <span class="hljs-number">3.1</span>、.type(inputType.xxx) 设置输入框type类型

二、按钮 1、语法 Button(‘按钮文本’)

三、扩展:元素间间隙 在Column()中编写{ space:间隙 } 示例: Column({space:10})

四、综合实战 - 华为登录

1、代码
@Entry
@Component
struct Index {
@State message: string = ‘Hello World’;
build() {
Column({space: 5}){
Image($r(‘app.media.app_icon’)).width(50)
TextInput({
placeholder:‘请输入用户名’
})
TextInput({
placeholder:‘请输入密码’
}).type(InputType.Password)
Button(‘登录’).width(‘100%’)
Row({space:10}){
Text(‘前往注册’)
Text(‘忘记密码’)
}
}.width(‘100%’)
.padding(20)
}
}

五、svg图标

HarmonyOS 主题图标库 | icon素材免费下载 | HarmonyOS开发者

1、用处
在界面中展示图标,拥有任意放大缩小不失真,可以改颜色的特点

2、获取 可以在Harmony OS的图标库中获取

六、布局元素的组成

1、外边距和内边距
1.1、外边距采用margin设置,内边距采用padding设置
1.2、若想为不同方向设置不同的内边距,可以采用以下方法
.padding({
left:1,
top:2,
right:3,
bottom:4
})

2、边框 语法: .border({ 对象属性 width:宽度 color:颜色 style:BorderStyl.样式
}) 若要对单独一条边设置 .border({ width:{ left:1, right:2
}
… })

3、组件圆角 语法: .borderRadius(参数) 或 .borderRadius({ topLeft: 5, topRight: 10, …
})

4、特殊型状的圆角设置 4.1、正圆 要求:宽高相同,圆角是宽或高的一半 4.2、胶囊 要求:宽度大于高度,圆角是高的一半

5、背景属性 backgroundColor:背景色 backgroundImage:背景图 backgroundImagePosition:背景图位置 backgroundImageSize:背景图尺寸

语法:
    backgroundColor(Color.颜色)
    
    backgroundImage(网络或本地图片地址,背景平铺方式)
    背景平铺方式:
        ImageRepeat.属性
            Norepeat:不平铺,默认值
            X:水平平铺
            Y:垂直平铺
            XY:水平垂直均平铺
    示例:
        backgroundImage(地址, ImageRepeat.XY)

    backgroundImagePosition({ x:位置坐标, y:位置坐标})
    或
    backgroundImagePosition(Alignment.属性)
    属性:
        center:中央
        TopStart:左顶点
        TopEnd:右顶点
        BottomEnd:右下顶点
        BottomStart:左下顶点
    
    backgroundImageSize(宽高对象 或 ImageSize.属性)
    属性:
        Contain:等比例缩放背景图,使宽或高与组件尺寸相同
        Cover:等比例缩放背景图至完全覆盖组件范围
        mimAuto:默认,原图尺寸</code></pre>  <h2 style="text-align: left;">七、单位问题</h2>  <pre style="position: relative;"><code class="language-javascript hljs "><span class="hljs-number">1</span>、问题:背景定位默认单位为PX,相对不同设备的适应很困难
    而宽高默认单位为vp——虚拟像素,相对于不同的设备会自动转换,保证不同设备视觉一致
    可背景却只支持px

2、解决方案: 函数 vp2px(数值) 将vp进行转换,得到px的数值

Day 2

一、线性布局

1、说明
通过线性容器Column和row实现
Column:垂直排列
row:水平排列

2、主轴上的对齐方式 属性:.justifyContent() 参数:枚举FlexAlign FlexAlign: Start:顶端对齐 Center:居中对齐 End:底端对齐 SpaceBetween:两端贴边,其余均匀分布 SpaceAround:空白间隙环绕 SpaceEvenly:所有元素均匀分布

3、交叉轴上的对齐方式 属性:.alignItems() 参数:枚举HorizontalAlign或VerticalAlign

     HorizontalAlign:交叉轴在水平方向
         start:靠左
         center:居中
         end:靠右
         
     VerticalAlign:交叉轴在垂直方向
         start:顶端
         Center:居中
         Bottom:底部

4、扩展:当输入枚举时使用ctrl+p,可以获取代码提示

二、自适应伸缩

1、设置了layoutWeight属性的 子元素 与 兄弟元素 ,会按照权重进行分配 主轴 的空间
2、语法:
.layoutWeight(数字)

三、综合案例 —— 京东登陆页面

1、知识点
1.1、单选框
Checkbox()
1.2、一段文本中,有文本需要单独定制,应该使用Text包裹Span

2、代码 import { ButtonOptions } from ‘@ohos.arkui.advanced.Dialog’;

@Entry
@Component
struct Index {
  @State message: string = <span class="hljs-string">'Hello World'</span>;
  build() {
    Column(){
      Row(){
        Image($r(<span class="hljs-string">'app.media.ic_public_close'</span>))
          .width(<span class="hljs-number">24</span>)
        Text(<span class="hljs-string">'帮助'</span>)
          .fontColor(Color.Gray)
      }
      .width(<span class="hljs-string">'100%'</span>)
      .justifyContent(FlexAlign.SpaceBetween)
      Row(){
        Image($r(<span class="hljs-string">'app.media.bilibili'</span>))
          .width(<span class="hljs-number">200</span>)
      }
      Column(){
        Row(){
          Text(<span class="hljs-string">'国家/地址'</span>)
            .layoutWeight(<span class="hljs-number">1</span>)
            .fontColor(Color.Gray)
          Text(<span class="hljs-string">'中国(+86)'</span>)
            .fontColor(Color.Gray)
          Image($r(<span class="hljs-string">'app.media.ic_public_arrow_right'</span>))
            .width(<span class="hljs-number">20</span>)
            .fillColor(Color.Gray)
        }
        .width(<span class="hljs-string">'100%'</span>)
        .height(<span class="hljs-number">40</span>)
        .backgroundColor(<span class="hljs-string">"#fff"</span>)
        .borderRadius(<span class="hljs-number">25</span>)
        .justifyContent(FlexAlign.SpaceBetween)
        .padding({
          left:<span class="hljs-number">20</span>,
          right:<span class="hljs-number">20</span>
        })

        TextInput({
          placeholder:<span class="hljs-string">'请输入手机号'</span>
        })
          .margin({
            top:<span class="hljs-number">20</span>
          })

        Row(){
          Checkbox()
            .width(<span class="hljs-number">12</span>)
            .height(<span class="hljs-number">12</span>)
            .borderRadius(<span class="hljs-number">12</span>)
          Text(){
            Span(<span class="hljs-string">'我已经阅读并同意'</span>)
            Span(<span class="hljs-string">'BiliBili隐私政策》'</span>)
              .fontColor(<span class="hljs-string">'#3274f6'</span>)
            Span(<span class="hljs-string">'《BiliBili用户服务协议》'</span>)
              .fontColor(<span class="hljs-string">'#3274f6'</span>)
            Span(<span class="hljs-string">'未注册的手机号将自动创建BiliBili账号'</span>)
          }.fontSize(<span class="hljs-number">12</span>)
          .lineHeight(<span class="hljs-number">20</span>)
        }
        .alignItems(VerticalAlign.Top)
        .margin({
          top:<span class="hljs-number">20</span>
        })
      Button(<span class="hljs-string">'登录'</span>)
        .width(<span class="hljs-string">'100%'</span>)
        .backgroundColor(<span class="hljs-string">'#2d92d7'</span>)
        .margin({top:<span class="hljs-number">20</span>})

        Row(){
          Text(<span class="hljs-string">'新用户注册'</span>)
            .fontColor(Color.Gray)
          Text(<span class="hljs-string">'账户密码登录'</span>)
            .fontColor(Color.Gray)
          Text(<span class="hljs-string">'无法登录'</span>)
            .fontColor(Color.Gray)
        }
        .margin({
          top:<span class="hljs-number">20</span>
        })
        .width(<span class="hljs-string">'100%'</span>)
        .justifyContent(FlexAlign.SpaceEvenly)

      Text(<span class="hljs-string">'其他登录方式'</span>)
        .margin({top:<span class="hljs-number">160</span>})
        .fontColor(Color.Gray)
      }
    }
    .width(<span class="hljs-string">'100%'</span>)
    .height(<span class="hljs-string">'100%'</span>)
    .padding(<span class="hljs-number">30</span>)
    .backgroundColor(<span class="hljs-string">'#f5f5f5'</span>)
  }
}</code></pre>  </div></div>

更多关于HarmonyOS 鸿蒙Next开发学习笔记的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next开发学习笔记的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next开发学习笔记回复

在HarmonyOS鸿蒙Next的开发学习中,你可能会遇到诸多新特性和技术点。以下是一些核心内容的简要概述:

  1. 分布式架构:HarmonyOS鸿蒙Next强化了分布式技术,支持多设备间的无缝协同。开发者需深入理解其分布式框架,以实现跨设备的资源共享和功能调用。

  2. ArkTS与声明式开发:ArkTS是HarmonyOS的声明式UI开发框架,简化了界面开发流程。通过学习ArkTS,你可以更高效地构建用户界面,提高开发效率。

  3. 能力组件化:HarmonyOS将系统能力封装为组件,开发者可以按需调用。这有助于减少重复开发,提升应用性能。

  4. 安全机制:鸿蒙系统注重用户数据的安全,提供了多种安全机制。开发者需熟悉这些机制,以确保应用的安全性和隐私保护。

  5. 开发工具与调试:掌握HarmonyOS提供的开发工具(如DevEco Studio)和调试技巧,对于快速定位和解决问题至关重要。

  6. 版本更新与兼容性:随着HarmonyOS的不断迭代,开发者需关注版本更新和兼容性测试,以确保应用在新版本系统上稳定运行。

如果在学习过程中遇到具体问题,建议查阅官方文档或参与开发者社区讨论。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部