










ArkTS是HarmonyOS应用开发语言。它在保持TypeScript(简称TS)基本语法风格的基础上,对TS的动态类型特性施加更严格的约束,引入静态类型。同时,提供了声明式UI、状态管理等相应的能力,让开发者可以以更简洁、更自然的方式开发高性能应用
console.log("今天也是加油的一天。")

// 三种常见的基础数据类型
// string 字符串
// number 数字
// boolean 布尔(真、假)
console.log(typeof "varin")
console.log(typeof 1)
console.log(typeof true)
console.log(typeof false)

//用来存储数据的容器
// 命名规则:只能包含数字、字符、下划线、$,不能以数字开头;不使用关键字和保留字;区分大小写
// 语法: let 变量名: 类型 = 值
let name : string = "varin"
console.log(name)
// 修改值
name = 'a'
console.log(name)

// 存储不可变的数据,强行修改会爆错
// 语法:const 变量名 :数据类型 = 值
const PI :number = 3.14
console.log("π:", PI)

// 语法: let 数组名:数据类型[] = [值1,值2]
let names:string[] = ["小明","小红","小美"]
// 打印数据中的所有值
console.log(names.toString())
// 修改names数组中下标为0的值
names[0]="小小明"
// 打印nams数组中下标为0的值
console.log(names[0])

简介:函数是特殊功能的可以重复使用的代码块
/*
定义函数
语法:
function 函数名(形参......){
}
调用函数语法:
函数名(实参)
*/
// 场景:传参打印不同数量的☆
function printStars(num:number){
if(num<=0){
return"数量错误"
}
let result:string = ""
for (let i = 0; i < num; i++) {
result+="☆"
}
return result;
}
// 调用函数方式1
console.log(printStars(1))
console.log(printStars(3))
console.log(printStars(5))
// 调用函数方式2
let starss:string = printStars(6)
console.log(starss)

简介:比普通的函数写法更加的简洁
/*
语法1:
()=>{
}
语法2:
#定义
let 函数名=(形参)=>{
return 结果
}
#调用:函数名(实参)
*/
let printStars = (num:number)=>{
let result :string = ""
for (let i = 0; i < num; i++) {
result+="☆";
}
return result;
}
console.log(printStars(1))
console.log(printStars(3))
console.log(printStars(5))
let starss:string = printStars(6)
console.log(starss)

简介:对象是用于描述物体的行为和特征,可以存储多种数据的容器。
/*
定义:
1 通过interface接口约定,对象的结构类型:
语法:
interface 接口名{
属性1:类型
属性2:类型
}
2 调用对象语法:
let 对象名:接口名={
属性1:值
属性1:值
}
*/
//
interface Person{
name:string
age:number
weight:number
}
let person :Person={
name:'张三',
age:11,
weight:111.1
}
console.log(person.name)
console.log(person.age.toString())
console.log(person.weight.toString())

简介:描述对象的行为
/*
1、约定方法类型
语法:
interface 接口名{
方法名:(形参)=>返回值类型
}
2、添加方法(箭头函数)
语法:
let 对象名:接口名={
方法名:(形参)={
方法体
}
}
*/
interface Person {
name:string,
play:(type:string)=>void
}
let person : Person={
name:'张三',
play:(type:string)=>{
console.log(person.name+"喜欢玩"+type+"类型的游戏")
}
}
console.log(person.name)
person.play("创造")

简介:联合类型是一种灵活的数据类型,它修饰的变量可以存储不同类型的数据。
/*
场景:一个变量既要存字符串也要存数字类型
语法:let 变量:类型1 | 类型2| 类型3=值
*/
let result : number |string = 100
console.log(typeof result)
result = "A"
console.log(typeof result)

扩展:联合类型也可以限制数据在一个范围内
// 性别限制:值只能是man或woman,填写其他将会报错。
let gender: 'man'| "woman" = "man"

简介:约定变量只能在一组数据范围内选择值
/*
定义语法:
enum 常量名{
常量1=值,
常量2=值,
}
调用语法:
常量名.常量1
*/
enum Colors{
Red="#f00",
Green="#0f0",
Blue="#00f"
}
console.log(Colors.Red)
// 约束类型调用
let green :Colors = Colors.Green
console.log(green)

@Entry
@Component
struct Index {
@State message: string = 'varin';
build() { // 构建
Row() { // 行
Column() { // 列
Text(this.message) // 文本
.fontSize(12) // 字体大小
.fontWeight(FontWeight.Bold) // 字体粗细
.fontColor("red") // 字体颜色
}
.width('100%') // 列宽
}
.height('50px') // 行高
}
}
布局思路:先排版,再放内容。
注意点:build只能有一个根元素,并且是容器组件
扩展:
组件语法:
容器组件(){
}
基础组件(参数)
.参数方法(参数)
示例效果实现
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("小说简介")
.textAlign(TextAlign.Start)
.width("100%")
.padding("20")
.fontWeight(FontWeight.Bold)
Row(){
Text("都市")
.textAlign(TextAlign.Start)
.width("23%")
.padding("5")
.fontWeight(FontWeight.Bold)
.backgroundColor("#f5f5f5")
.margin("10px")
Text("生活")
.textAlign(TextAlign.Start)
.width("23%")
.padding("5")
.fontWeight(FontWeight.Bold)
.backgroundColor("#f5f5f5")
.margin("10px")
Text("情感")
.textAlign(TextAlign.Start)
.width("23%")
.padding("5")
.fontWeight(FontWeight.Bold)
.backgroundColor("#f5f5f5")
.margin("10px")
Text("男频")
.textAlign(TextAlign.Start)
.width("23%")
.padding("5")
.fontWeight(FontWeight.Bold)
.backgroundColor("#f5f5f5")
.margin("10px")
}.width("100%")
.height("100px")
}
}
}

/*
组件(){
}
.属性方法(参数)
.属性方法(参数)
*/
Text("男频")
.textAlign(TextAlign.Start)
.width("23%")
.padding("5")
.fontWeight(FontWeight.Bold)
.backgroundColor("#f5f5f5")
.margin("10px")
width()
height()
backgroundColor()

// 初始结构代码
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("小说简介")
Row(){
Text("都市")
Text("生活")
Text("情感")
Text("男频")
}
}
}
}
// 实现效果代码
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("小说简介")
.width("100%")
.fontSize(18)
.height(40)
.fontWeight(FontWeight.Bold) // 100---900
Row(){
Text("都市")
.width(50)
.height(30)
.backgroundColor(Color.Orange)
Text("生活")
.width(50)
.height(30)
.backgroundColor(Color.Pink)
Text("情感")
.width(50)
.height(30)
.backgroundColor(Color.Yellow)
Text("男频")
.width(50)
.height(30)
.backgroundColor(Color.Gray)
}
.width("100%")
}
}
}

// 使用枚举类
Text("xx").fontColor(Color.Pink)
// 使用十六进制定义
Text("xx").fontColor("#f00")
实现效果
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("学鸿蒙")
.width("100%")
.height(30)
.lineHeight(30)
.fontWeight(500)
Row()
{
Text("置顶")
.width(30)
.height(20)
.fontSize(12)
.fontColor("#ff910404")
Text("新华社")
.width(40)
.height(20)
.fontSize(12)
.fontColor("#ff918f8f")
}.width("100%")
}
}
}

/*
溢出省略号语法,需要配合maxLines(行数)使用
*/
.textOverflow({
overflow:TextOverflow:xxx
})
// 行高
.lineHeight(高度)

@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("Harmony OS开发")
.height(50)
.lineHeight(50)
.width("100%")
.fontSize(34)
.fontWeight(FontWeight.Bold)
Row(){
Text("方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包括境界的UI语法、丰富的")
.maxLines(2)
.textOverflow({
overflow:TextOverflow.Ellipsis
})
.height(60)
.lineHeight(30)
}
}
}
}

// 本地图片存放位置:src/main/resources/base/media
// 网络图片:使用url即可
Image(图片数据源)
// 引用图片写法:
Image($r("app.media.文件名"))

@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Image("https://p4.itc.cn/images01/20231117/8fc1311a803348288b8af7139f47c364.jpeg")
.height(200)
.width("100%")
.borderRadius(10)
Text("Harmony OS开发")
.width("100%")
.lineHeight(30)
.fontSize(18)
.fontWeight(FontWeight.Bold)
Text("方舟开发框架(简称ArkUI)为HarmonyOS应用的UI开发提供了完整的基础设施,包括境界的UI语法、丰富的")
.maxLines(2)
.textOverflow({
overflow:TextOverflow.Ellipsis
})
.textIndent(20)
.lineHeight(30)
Row(){
Image("https://p4.itc.cn/images01/20231117/8fc1311a803348288b8af7139f47c364.jpeg")
.height(20)
.width(20)
.borderRadius(100)
Text("Varin")
.fontWeight(400)
.width(40)
.textAlign(TextAlign.End)
Text("2024-06-22")
.fontWeight(400)
.width("80%")
.fontColor("#ff797575")
.textAlign(TextAlign.End)
}
.width("100%")
.height(40)
} .margin("1%")
}
}

// 输入框
// 参数对象:placeholder 提示文本
// 属性方法:.type(InputType.xxx) 设置输入框的类型
TextInput(参数对象)
.属性方法()
// 示例:
TextInput({
placeholder:"占位符"
}).type(InputType.Password)
// 按钮语法
Button("按钮文本")

@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column() {
TextInput({
placeholder:"请输入用户名"
}).width("96%")
.height(60)
.margin(10)
TextInput({
placeholder:"请输入密码"
}).width("96%")
.height(60)
.margin(10)
.type(InputType.Password)
Button("登录")
.width("50%")
}
.width("100%")
.height(40)
}
}

// 控制Colunm 和Row内元素的间隙
Column({
space:10
})
实现效果图
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Row(){}
.height(60)
Image($r("app.media.hw"))
.width(60)
.height(60)
.borderRadius(60)
Column({space:20}){
TextInput({
placeholder:"请输入用户名"
})
.width("96%")
TextInput({
placeholder:"请输入密码"
}).type(InputType.Password)
.width("96%")
Button("登录").width("96%")
}.margin("2%")
Row({space:10}){
Text("前往注册")
Text("忘记密码")
}
}
}
}

介绍:SVG图标,任意放大缩小不失真,可以改颜色
// 语法和Image类似
// .fillColor("#f00") 修改颜色
Image($r("app.media.ic_public_play_next"))
.fillColor("#f00")
.width(20)
.width(20)
/
*
内边距:padding()
外边距:margin()
边框:border()
*
/
// 1.padding使用
// 场景一:四边边距都一样
padding(10)
// 场景二:四边边距不一样
padding({
top:10,
right:1,
bottom:11,
left:23
})
// 2.margin使用
// 场景一:四边边距都一样
margin(10)
// 场景二:四边边距不一样
margin({
top:10,
right:1,
bottom:11,
left:23
})
// 3.border使用
// 场景一:四边边框都一样
Text("aaa")
.border({
color:"#ff0", // 颜色
width:1, // 必填
radius:10, // 圆角
style:BorderStyle.Solid // 边框类型:Solid(实线)
})
// 场景二:四边边框不一样(只设置了右边框)
Text("aaa")
.border({
color:"#ff0",
width:{
right:1
},
radius:10,
style:BorderStyle.Solid
})

@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Row(){
Row(){
Image($r("app.media.ic_public_list_add_transparent"))
.width(15)
.height(15)
Text("状态").fontColor("#ff7e7d7d").fontSize(12).margin({
left:5,
right:7
})
}.border({
width:1,
color:"#ffb1aeae",
style:BorderStyle.Solid,
radius:30
}).margin({
left:10,
top:10
}).padding(5)
Row(){
Image($r("app.media.hw"))
.borderRadius(50)
.width(15)
.height(15)
Image($r("app.media.hw"))
.borderRadius(50)
.width(15)
.height(15)
.margin({
left:-5
})
Image($r("app.media.hw"))
.borderRadius(50)
.width(15)
.height(15)
.margin({
left:-5
})
Text("3个朋友").fontColor("#ff7e7d7d")
.fontSize(12)
.margin({
left:5
})
Row(){
}.width(10)
.height(10)
.borderRadius(50)
.backgroundColor("red")
.margin({
left:10,
right:10
})
}.border({
width:1,
color:"#ffb1aeae",
style:BorderStyle.Solid,
radius:30
}).margin({
left:10,
top:10
}).padding(5)
}
}
}


@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Image($r("app.media.hw")).borderRadius(50)
.width(100)
.height(100)
Text("大王叫我来巡山").fontWeight(FontWeight.Bold).margin({
top:10,
bottom:50
})
Button("QQ登录").width("96%").margin({
bottom:10
})
Button("微信登录").width("96%")
.backgroundColor("#ffe5e5e5").fontColor("#000")
}.margin({
top:20,
left:"2%",
right:'2%'
}).width("96%")

// borderRadius使用
// 场景一:四边都一样
borderRadius(10)
// 场景二:四边不一样
.borderRadius({
topLeft:1,
topRight:2,
bottomLeft:1,
bottomRight:2
})
/*
背景色:backgroundColor
背景图:backgroundImage
背景图位置:backgroundOpsition
背景图尺寸:backgroundSize
*/
/*
ImageRepeat:平铺枚举
*/
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("测试").backgroundImage($r("app.media.hw"),ImageRepeat.XY)
.width("100%")
.height("100%")
.fontColor("red")
}.padding(20)
}
}

/*
backgroundImagePosition()
两种形式:
一、使用x,y轴
二、使用Alignment枚举类
*/
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Text("测试").backgroundImage($r("app.media.hw"))
.backgroundColor(Color.Pink)
.backgroundImagePosition(Alignment.Center)
.width("100%")
.height("100%")
.fontColor("red")
}.padding(20)
}
}

/*
两种方式:
方式一:
backgroundSize({
width:10,
heigth:10
}}
方式二:
使用枚举:ImageSize
*/
线性布局(LineLayout)通过线性容器Column和Row创建。
// column:垂直
// Row: 水平
// 属性
.justifyContent(枚举FlexAlign)
// 枚举三个参数:Start(上) Center(中)End(下)


@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Row(){
Image($r("app.media.ic_arrow_left"))
.width(20)
Text("个人中心")
Image($r("app.media.ic_more"))
.width(20)
}.height(40)
.backgroundColor(Color.White)
.width("100%")
.padding(10)
.justifyContent(FlexAlign.SpaceBetween)
.border({
width:{
bottom:1
},
style:BorderStyle.Solid,
color:"#ffe0e0dc"
})
}.width("100%")
.height("100%")
.backgroundColor("#ffe9e9e9")
}
}

// 属性:alignitems()
// 参数:枚举类型
// 交叉轴在水平方向:horizontalalign
// 交叉轴在垂直方向:verticalalign
// Column>>>>h
//Row>>>>V
实现效果
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Row(){
Column(){
Text("玩一玩")
.fontSize(20)
.lineHeight(40)
.fontWeight(FontWeight.Bold)
.textAlign(TextAlign.Start)
Row(){
Text("签到兑礼")
.fontColor("#ffaeacac")
.fontSize(14)
Text("|")
.fontColor("#ffaeacac")
.fontSize(14)
.margin({
left:5,
right:5
})
Text("超多大奖")
.fontColor("#ffaeacac")
.fontSize(14)
Text("超好玩")
.fontColor("#ffaeacac")
.fontSize(14)
}
}.alignItems(HorizontalAlign.Start)
.margin({
left:20
})
Image($r("app.media.cat"))
.width(70)
.borderRadius(10)
Image($r("app.media.ic_arrow_right"))
.fillColor("#ff858383")
.width(30)
.margin({
right:15
})
}.justifyContent(FlexAlign.SpaceBetween)
.width("100%")
.height(100)
.backgroundColor(Color.White)
.border({
color:"#fff3f2f2",
width:1,
radius:10,
style:BorderStyle.Solid
})
}
.width("100%")
.height("100%")
.padding(5)
.backgroundColor("#f5f5f5")
}
}

// 属性
.layoutWeight(权重分配)
/*
一行 text3宽为固定值:50,
剩下的宽将分为5分
text1占1份
text2占4份
*/
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Row() {
Text("1")
.height(30)
.layoutWeight(1)
.backgroundColor("#f00")
Text("2")
.height(30)
.layoutWeight(4)
.backgroundColor("#0f0")
Text("3")
.height(30)
.width(50)
.backgroundColor("#00f")
}.width("100%")
.height(30)
}
}

实现效果
import { Filter } from '@ohos.arkui.advanced.Filter';
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Column(){
Text("每日艺术分享.......")
.fontWeight(700)
.height(40)
Text("No.43")
.height(20)
.fontWeight(700)
Row(){
Image($r("app.media.cat"))
.width(15)
.height(15)
.borderRadius(15)
Text("插画师分享聚集地")
.layoutWeight(1)
.fontSize(12)
.padding({
left:5
})
Image($r("app.media.ic_like"))
.width(10)
.height(10)
.fillColor("#ff8f8b8b")
Text("2300")
.fontColor("f5f5f5")
.fontSize(12)
.padding({
left:5
})
}.height(40)
}.alignItems(HorizontalAlign.Start)
.padding(10).justifyContent(FlexAlign.End)
.borderRadius(10)
.width("70%")
.backgroundImage($r("app.media.nick"))
.backgroundImageSize({
width:"100%",
height:'70%'
})
.height(350)
.backgroundColor(Color.White)
.margin({
top:10
})
}
.width("100%")
.height("100%")
.backgroundColor("#ffcbc9c9")
}
}

实现效果
/*
扩展:
checkBox:复选框
span组件,在一段文本中单独修改某些文本,可以使用span包裹
blank组件:弹簧组件,可以自动撑开row或colum的宽或高(填充空白区域)
*/
import { Filter } from '@ohos.arkui.advanced.Filter';
@Entry
@Component
struct Index {
@State message: string = 'varin';
build() {
Column(){
Row(){
Text("×")
.fontSize(25)
Text("帮助")
}.width("100%")
.justifyContent(FlexAlign.SpaceBetween)
Image($r("app.media.jd_logo"))
.width(250)
// TextInput({placeholder:"国家/地址"})
// .backgroundColor(Color.White)
Row(){
Text("国家/地址").fontColor("#777").layoutWeight(1)
Text("中国(+86)").fontColor("#777")
Image($r("app.media.ic_arrow_right")).height(20).fillColor("#777")
}.width("100%").height(50).borderRadius(20).backgroundColor(Color.White).padding({
left:15,right:15
})
TextInput({placeholder:"请输入手机号"})
.backgroundColor(Color.White)
.margin({
top:10
})
Row(){
// 单选
// Radio({
// value:'1',
// group:"1"
// }).checked(false).backgroundColor(Color.White)
// 复选
Checkbox().width(10)
Text(){
Span("我已经阅读并同意")
Span("《京东隐私政策》")
.fontColor("#00f")
Span("《京东用户服务协议》")
.fontColor("#00f")
Span("未注册的手机号将自动创建京东账号")
}.fontSize(13).margin({top:3})
// Column({space:5}){
//
// Text("我已经阅读并同意《京东隐私政策》 《京东用户服务协议》")
// .padding({top:12})
// .fontSize(11)
//
//
// Text("未注册的手机号将自动创建京东账号")
// .fontSize(11)
//
// }.layoutWeight(1)
// .alignItems(HorizontalAlign.Start)
}.alignItems(VerticalAlign.Top).margin({top:25})
// .backgroundColor("red")
Button("登录")
.width("100%")
.backgroundColor("#ffc11010")
.margin({
top:15
})
Row(){
Text("新用户注册")
.fontSize(12)
.fontColor("#666")
Text("账号密码登录")
.fontSize(12)
.fontColor("#666")
Text("无法登录")
.fontSize(12)
.fontColor("#666")
}.width("100%")
.padding(15).justifyContent(FlexAlign.SpaceEvenly)
Blank()
Column(){
Text("其他登录方式").fontSize(14).margin({
bottom:20
})
Row(){
Image($r("app.media.jd_huawei")).width(32).borderRadius(16)
Image($r("app.media.jd_wechat")).width(32).borderRadius(16).fillColor("#ff089408")
Image($r("app.media.jd_weibo")).width(32).borderRadius(16).fillColor("#ffd41010")
Image($r("app.media.jd_QQ")).width(32).borderRadius(16).fillColor("#ff05afcd")
}.width("100%").justifyContent(FlexAlign.SpaceBetween).padding({
left:20,right:20
})
}.margin({bottom:10})
}.width("100%").height("100%").backgroundImage($r("app.media.jd_login_bg")).backgroundImageSize(ImageSize.Cover)
.padding({
left:15,
right:15,
top:10,
bottom:20
})
}
}
