鸿蒙笔记

1.组件:
(1)Column(){} 列
//space:数字 设置组件间隙(间隙一致)

Row(){} 行

Text('') 文本

.width() 宽度

//可以是数值也可以是百分比(常用于调整大小)

.height 高
//可以是数值也可以是百分比

.fontSize() 文字大小
//默认是16

.fontWeight() 文本粗细
//加粗 FontWeight.Bold
//100~900的数字,加粗700,默认400

.fontColor 文字颜色

.fontStyle(FontStyle.Italic) 文本倾斜

.textAlign(TextAlign.xxx) 文本对齐方式
//PS : Center : 居中

.backgroundColor 背景色

.padding 内边距

.margin 外边距

.border 边框

checkbox() 复选框

Span() 定制文本

Blank() 填充组件(像弹簧)

flex() 弹性布局

position 绝对定位

score() 滚动组件

layoutWeight(x) 按分比进行空间分配

scale 缩放(图片动画)

 


2.数据类型:string number boolean
3.存储变量:
let title: string = '苹果'
//定义
title = '香蕉'
//修改
4.存储常量:
//const 常量名: 类型 = 值
const PI: number = 3.1415926
5.数组:
//let 数组名: 类型[] = [a,b,c,...]
let names: string[] = ['甲','乙','丙']
6.函数:
function 函数名(需要处理的数据){
函数体
return 处理后的结果
}

let 变量名:类型 = 函数名(实参1,实参2,.....)
7.箭头函数:
let 函数名 = (形参1: 类型,形参2: 类型) => {
//函数体
}

函数名(实参1,实参2,...)
8.对象:
//【1】通过interface接口约定对象结构类型
interface 接口名 {
属性1: 类型1
属性2: 类型2
属性3: 类型3
}

interface Person {
name: string
age: number
weight : number
}

//【2】定义对象并使用
let 对象名称: 对象结构类型 = 值

let person:Person = {
name:'张三',
age:'18',
weight : 90
}
9.对象 - 方法:
方法作用:描述对象的具体行为

//1.约定方法类型:
interface 接口名称 {
方法名:(参数:类型) => 返回值类型
}

interface Person{
dance: () =>void
sing:(song:string)=> void
}

//2.添加方法:
let ym:Person = {
dance:() =>{
console.log('杨幂说','我来跳个舞')
},
sing:(song: string) => {
console.log('杨幂说','我来唱首',song)
}
}
ym.dance()
ym.sing('爱的供养')
10.枚举:
enum 枚举名 {
常量1 = 值,
常量2 = 值,
。。。。
}

enum ThemeColor {
Red = '#ff0f29',
Orange = '#ff7100',
Green = '#30b30e'
}

//取值:
let color:ThemeColor = ThemeColor.Red
console.log('主页颜色' , color)

 

11.组件属性值:
(1)字体颜色:
语法:.fontColor(颜色值)
//颜色值: 【1】Color.颜色名
【2】'#xxxx' (#开头的16进制)
//字体显示划掉痕迹:
.decoration({type:TextDecorationType.LineThrough})
(2)文本溢出省略号:
语法: .textOverflow({
overflow: TextOverflow.Ellipsis
})
.maxLines(数字)

//ps : 需要配合.maxLines(行数)使用
(3)行高:
语法: .lineHeight(数字)

(4)图片组件:
【1】语法:Image(图片数据源)
//支持网络图片资源和本地图片资源
[1] 网络图片加载: Image('网图地址')
[2] 本地图片加载: Image($r('app.media.文件名'))
【2】svg图标修改颜色:
.fillColor(颜色)
//不会失真!
(5)输入框和按钮:
【1】输入框:
语法: TextInput(参数对象)
.属性方法()
//参数对象:placeholder 提示文本
//属性方法:.type(InputType.xxx) 设置输入框type类型
//type值 解释说明
Normal 基本输入模式,无特殊限制
Password 密码输入模式

TextInput({
placeholder:'请输入用户名'
})
.type(InputType.Password)
【2】按钮:
语法:Button('文本')

【3】点击事件:(被点击时触发的事件)
作用:监听(感知)用户点击行为,进行对应操作
语法:.noClick((参数)=》{})

//ps: .noClick((参数)=> {
AlertDialog.show({
message : '你好-这是个弹框'
})
})


(6)内边距padding:(外边距margin:参考内边距)
作用:在组件内添加间距,拉开内容与组件边缘之间的距离
语法:
【1】.padding(20)
//四个方向内边距均为20
【2】.padding({
top : 10,
right : 20,
bottom : 40,
left : 80
})
//四个方向内边距分别设置
//外边距margin:参考内边距
(7)边框border:
作用:给组件添加边界,进行装饰美化
语法:
【1】四个方向相同:
Text('边框语法').border({
width : 1, //宽度(必设)
color : '#3274f6' //颜色
style : BorderStyle.Solid //样式(虚线),实线:Dashed
})
【2】单独设置:
Text('边框语法').border({
width : {
left : 1, right : 2
},
color : {
left : Color.Red, right : Color.Blue
},
style : {
left : BorderStyle.Dashed,
right : BorderStyle.Dotted
}
})
//top,right,bottom,left


(9)设置组件圆角:
属性:.borderRadius(参数)
可分别设置(topLeft,topRight,bottomRight,bottomLeft)
//正圆:宽=高,且圆角是宽高的一半
//胶囊:宽>高且圆角是高的一半
(10)背景图:
【1】属性:.backgroundImage(背景图地址,ImageRepeat.XY)
//背景图平铺方式:ImageReperat:(可省略)
NoRepeat : 不平铺(默认)
X : 水平平铺
Y : 垂直平铺
XY : 水平垂直都平铺
【2】位置:.backgroundImagePsotition(坐标对象或枚举)
参数:
位置坐标:{x:位置坐标,y:位置坐标}
枚举 Alignment
Text()
.backgroundImage($r('app.media.flower'))
.backgroundImagePosition({x : 100, y : 100})
//具体坐标
//背景定位默认单位:
px:实际的物理像素点,设备出厂即定好
//宽高默认单位:
vp:虚拟像素,相对于不同的设备会自动转换,保证不同设备视觉一致(推荐)
//函数:vp2px(数值) 将 vp进行转换,得到px的数值
.backgroundImagePosition(Alignment.Center)
//中心
【3】尺寸: -backgroundImageSize
作用:背景图缩放
属性:.backgroundImageSize(宽高对象或枚举)
参数:
背景图宽高:{width:尺寸,height:尺寸}
枚举ImageSize:
Contain:等比例缩放背景图,当宽或者高与组件尺寸相同时停止缩放
Cover:等比例缩放背景图至图片完全覆盖组件范围
fill:不等比例缩放背景图,使得图片完全填满组件范围
Auto:默认,原图尺寸


(11)线性布局:(通过线性容器Column和Row创建)
Column容器:子元素垂直方向排列
Row容器:子元素水平方向排列

【1】排布主方向上的对齐方式(主轴)
属性:.justifyContent(枚举FlexAlign)
// .justifyContent(FlexAlign.Start) 主轴起始位置对齐
.justifyContent(FlexAlign.Center) 主轴居中对齐
.justifyContent(FlexAlign.End) 主轴结束位置对齐
.justifyContent(FlexAlign.SpaceBetween) 贴边显示,中间的元素均匀分布间隙(0 1 1 1 0)
.justifyContent(FlexAlign.SpaceAround) 间隙环绕(1 2 2 2 1)
.justifyContent(FlexAlign.SpaceEvenly) 间隙均匀环绕(1 1 1 1 1)

【2】交叉轴对齐方式:
属性:alignItems()
参数:枚举类型
交叉轴在水平方向:.alignItems(HorizontalAlign.xxx)
交叉轴在垂直方向:.alignItems(VerticalAlign.xxx)

(12)自适应伸缩:
//设置layoutWeight属性的子元素与兄弟元素,会按照权重进行分配主轴的空间
语法:.layoutWeight(数字)

(13)定制文本:
一段文本中,有文本样式需要单独定制,则用Text包裹Span
Text(){
Span('这是测试文字1')
Span('这是测试文字2').fontColor('#3274f6')
}
(14)弹性布局:(flex())(亦称伸缩布局,涉及换行时可用)
【1】Flex默认主轴水平往右,交叉轴垂直往下 --->Row
【2】调整主轴方向:
direction : FlexDirection.Row(默认) / Column
【3】调整主轴对齐方式:
justifyContent :FlexAlign.SpaceAround
【4】交叉轴对齐:
alignItems : ItemAlign.Stretch
【5】flex换行-wrap
属性: [1]FlexWrap.NoWrap 单行布局
[2]FlexWrap.Wrap 多行布局

Flex({
direction : FlexDirection.Row,
justifyContent : FlexAlign.SpaceAround,
alignItems : ItemAlign.Stretch
})

(15)绝对定位:(position)(灵活)
作用:控制组件位置,可以实现层叠效果
特点:
1.参照父组件左上角进行偏移
2.绝对定位后的组件不再占用自身原有位置
语法:.position(位置对象)
参数:{x:水平偏移量,y:垂直偏移量}
调整组件层级:
.zIndex(数字)
//可以在不动结构的情况下,调整组件的层级 .zIndex(数字),数字越大层级越高

(16)层叠布局:(stack)(默认居中)(简洁)
层级:zIndex(数字)

Stack({
alignContent : Alignment.Center
//设置对齐方式,默认居中
}){
Item1()
Item2()
Item3()
}


(17)滚动布局:(Scroll())

 

 


12. (1)字符串拼接:
语法:¥{......}

(2)类型转换:
【1】字符串转数字:
Number():字符串直接转数字,转换失败返回NaN(字符串必须全数字)
parseInt():去掉小数部分转数字,转换失败返回NaN
parseFloat():保留小数部分转数字,转换失败返回NaN
【2】数字转字符串:
toString() : 数字直接转字符串
toFixed() : 四舍五入转字符串,可设置保留几位小数,默认为0(取整)
13.交互
(1)点击事件:
说明:组件被点击时触发的事件
作用:监听(感知)用户点击行为,进行对应操作
语法:.onClick((参数)=>{})
// AlertDialog.show({
message:"你好~ 这是个弹框!"
})
(2)状态管理:
普通变量:只能在初始化时渲染,后续将不会再刷新

状态变量,需要装饰器修饰,改变会引起UI的渲染刷新(必须设置类型和初始值)
//@State myMsg:string = 'hello 黑马'
//更新: Text(this.myAge.toString()).onClick(()=>{
this.myMsg = '你好,状态!'
})
//ps:定义在组件内的普通变量或状态变量,都需要通过this访问
14.数组
(1)定义:
语法:let names:string[] = ['张三','李四','王五']
取值(通过下标):
语法: console.log('数组取值',names[1])
console.log('数组长度',names.length)
(2)添加数组元素:
[1]往开头加:
数组名.unshift(数据1,数据2,...)
[2]往结尾加:
数组名.push(数据1,数据2,...)
(3)删除数组元素:
[1]从开头删:
数组名.shift()
[2]从结尾删:
数组名.pop()
(4)任意位置添加/删除数组元素:
语法:数组名.splice(起始位置,删除的个数,新增元素1,新增元素2,......)

15.语句
(1)概念:一段可以执行的代码,是一个行为(num = a + b)
(2)表达式:可以被求值的代码,并将其计算出一个结果


16.switch分支:
switch(表达式){
case 值1:
与值1匹配执行的语句
break
case 值2:
与值2匹配执行的语句
break
default:
以上都未成功匹配执行的代码
}

17.for...of遍历数组
语法: for(let item of 数组名){
console.log('for...of...名字是',item)
}
//for...of:在..之中进行循环
//item:声明的一个变量,用来在循环的时候接收每一个数组元素
18.数组:
【1】约定接口:
interface Student {
stuId:number
name: string
gender: string
age: number
}

【2】基于接口,构建对象数组:
let stuArr: Student[] = [
{stuId: 1, name:'小丽', gender:'女', age:12}
{stuId: 2, name:'小红', gender:'女', age:13}
]

//打印单个(具体使用(访问-->通过下标))
console.log("小丽",stuArr[1].name)
//打印全部
console.log("小丽",JSON.stringify (stuArr[1]))


//包括对象的复杂数据,如果想要在日志中打印,需要调用一个方法
//(JSON.stringify(复杂类型) 对象/数组)转成字符串格式
【3】支持遍历
for(let item of stuArr){
console.log('每一项',JSON.stringify(item))
}

19.渲染控制(ForEach)
//ForEach可以基于数组的个数,渲染组件的个数。(简化代码)
(1)语法:
ForEach(arr,(item,index)=>{})

ps: @State titles:string[] = ['电子产品','精品服饰','母婴产品','影音娱乐','海外旅游']
build(){
Column(){
ForEach(this.titles,(item: string,index: number)=>{
Text(item)
.fontSize('24')
.fontWeight(700)
.fontColor(Color.Orange)
.width('100%')
.padding(15)
})
}
}
20.角标组件(Badge)
(1)语法:
Badge({
count: 1, //角标数值(为0自动隐藏)
position: BodgePosition.RightTop, //角标位置
style: {
fontSize: 12, //文字大小
badgeSize: 16, //圆形大小
badgeColor:'#FA2A2D' //圆形底色
}
}){
Image($r('app.media.bg_01'))
.width(80)
}

21.Grid布局:
Gird(){
ForEach([1,2,3,4,5,6,7,8,9,10,11,12],()=>{
GridItem(){
Column(){

}
.width("100%")
.height("100%")
.backgroundColor(Color.Green)
.border({width: 1})
}
})
}
.columusTemplate('1fr 1fr 1fr 1fr')
//设置每行中列的个数及其所占比例
.rowsTemplate('1fr 1fr 1fr')
//设置每列中行的个数及其所占比例
.columnsGap(5)
//设置列的间隙
.rowsGap(5)
//设置行的间隙
.width('100%')
.height(500)
.backgroundColor(Color.Pink)

22.swiper轮播组件
Swiper是一个 容器组件,当设置了多个子组件后,可以对这些 子组件 进行轮播显示。(文字、图 片...)
//华为api:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts- //layout-development-create-looping-V5
(1)基本用法:
语法结构:
Swiper() {
// 1. 轮播内容
Text('1')
Text('2')
Text('3')
}
// 2. 设置尺寸(内容会自动拉伸)
.width('100%')
.height(100)
(2)基本用法(1):
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
build() {
Column() {
//swiper由内容撑开,需要考虑设置宽高
// Swiper 轮播组件的基本使用
// 1. Swiper 包内容
// 2. Swiper 设尺寸
Swiper(){
Text("1")
.backgroundColor(Color.Brown)
Text("2")
.backgroundColor(Color.Gray)
Text("3")
.backgroundColor(Color.Red)
Text("4")
.backgroundColor(Color.Green)
}
.height(200)
.width("100%")
}
.height('100%')
.width('100%')
}
}
(3)常见属性:
属性方法 传值 作用 默认值
loop boolean 是否开启循环 true
autoPlay boolean 是否自动播放 false
interval number 自动播放的时间间隔(ms) 3000
vertical boolean 纵向滑动轮播 false
...其他属性 见文档
(4)样式自定义(圆点):
Swiper() {
...
}
.indicator(
Indicator.dot() // 小圆点
.itemWidth(20) // 默认的宽
.itemHeight(20) // 默认的高
.color(Color.Black) // 默认的颜色
.selectedItemWidth(30) // 选中的宽
.selectedItemHeight(30) // 选中的高
.selectedColor(Color.White) // 选中的颜色
)
23.进度条组件:
(1)概述:进度条组件,用于显示内容加载或操作处理等进度
(2)参数规则:Progress(options: {value: number, total?: number, type?: ProgressType})
(3)常用属性:
[1]value number:设置当前进度值,设置小于0的数值时自动为0,设置大于Total的数值时 自动为total,非法数值不生效。
[2]color ResourceColor:设置进度条颜色值。默认值:#ff007dff。
[3]backgroundColor ResourceColor : 设置进度条底色值。默认值:#19182431。
[4]style object strokeWidth:设置进度条边框宽度(不支持百分比设置),该属性支持设 置进度条两侧半圆的边框宽度,默认值表示进度条两侧的半圆之一。
[5]scaleCount : 设置进度条刻度总数量。默认值:120。
[6]scaleWidth : 设置进度条刻度宽度(不支持百分比设置),刻度相对于进度条宽度尺寸, 为绝对值模式。默认值:2.0vp

posted @ 2025-04-09 20:04  一颗小清心  阅读(35)  评论(0)    收藏  举报