Q1.aboutToAppear和onAppear的区别?

aboutToAppear:是被@Component修饰自定义组件的生命周期方法,函数在创建自定义组件的新实例后,在执行其build函数之前执行。

onAppear:是每个组件的属性方法,在该组件显示时触发此回调。

eTS里面object类型有办法更新吗?

1
2
3
4
5
6
7
8
lis:Array<object> = [
{
'id': 0,
'name': '计划',
'image': $rawfile('index/ic_public_view_list_filled2.png'),
'number':0
},
this.lis['0'].name = 1

然后用这种方式更新前端不会跟着更新,文档里面看到有@State装饰,但是不支持object类型,有其他方式解决吗?

“number”最好不要作为属性,因为“number”是字段类型。Object请改为class,示例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Observed export class xxx {
id: number;
name: string;
image: string;
number: number;
constructor(id: number, name: string, image:string,number:number) {
this.id = id;
this.name = name;
this.image = name;
this.number = number;
}
}
lis: Array<xxx> = [{
'id': 0,
'name': '计划',
'image': xxx,
'number': 0
}]
this.lis[0].name='new Name'

Q2.ets 的【TextArea】组件如何做到清空操作?

1
2
3
4
5
6
@State text: string = 'test'
TextArea({ placeholder: this.text })
//...
Button().onClick((value: string) => {
this.text = ''
})

Q3.怎么获取鸿蒙系统的小时制

可以使用DateFormatUtil.is24HourClock方法。

Q4.使用ArkUI开发的App能在安卓设备上安装吗?

不可以。HarmonyOS的应用只能运行在鸿蒙系统里。鸿蒙系统能运行HarmonyOS的应用和安卓应用。但是安卓系统只能运行安卓应用。

Q5.如何实现遮罩效果

使用onTouch实现按下抬起事件,.mask()实现遮罩的效果。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Entry
@Component
struct Index {
@State mask:boolean=false
build() {
Column() {
Image('/comment/bg.jpg')
.mask(this.mask?new Rect({ width: '500px', height: '280px' }).fill(Color.Gray):null)
.width('500px').height('280px')
.onTouch((event: TouchEvent) => {
switch(event.type){
case TouchType.Down:
this.mask=true
break;
case TouchType.Up:
this.mask=false
break;
}
})
}.width('100%').margin({ top: 5 })
}
}

Q6.ets声明式ui开发,怎么获取当前系统时间

在这里,我们将字符串用@state包裹,这样可以监听数据的更新

我们给Text绑定点击时间,然后点击,即可显示当前时间。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Entry
@Component
struct Index {
@State message: string = 'Hello World'
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold).onClick(()=>{
let date = new Date()
//获取当前时间
// this.message=date.toLocaleString();
//周几
// this.message=date.getUTCDay().toString();
//日期
// this.message=date.getUTCDate().toString();
// //农历月份
// this.message=date.getUTCMonth().toString();
this.message=date.getFullYear() + "年" + (date.getMonth() + 1) + "月" + date.getDate() + "日" + date.getHours() + "时" + date.getMinutes() + "分" + date.getSeconds()+ "秒"
})
}
.width('100%')
}
.height('100%')
}
}

Q7.如何解决安装错误或者需要将 compileSdkVersioncompatibleSdkVersion 以及 SDK 版本需要与运行设备的 apiVersion 对应起来

运行的设备(模拟器和真机)和 SDK 版本的不匹配,因此会报 INSTALL_PARSE_FAILED_USESDK_ERROR 错误。

想解决这个问题,需要将 compileSdkVersioncompatibleSdkVersion 以及 SDK 版本需要与运行设备的 apiVersion 对应起来。

但是我们不能简单修改配置文件中 compileSdkVersion 和 c ompatibleSdkVersion 的版本号,因为使用不同的 HarmonyOS Sdk 版本,创建的 HarmonyOS 工程的目录结构和开发语言都不相同。

  • API Version 4~7 构建体系是由 Gradle 构建工具和构建插件组成,不要基于这个版本去开发,不然后期从 Gradle 迁移到 Hvigor 是件非常痛苦的事
  • API Version 8~9 构建体系是由 Hvigor 构建工具和构建插件组成

开发语言也不一样:

  • API Version >= 9 仅仅支持 ArkTS
  • API Version == 8 支持 ArkTS 和 JS
  • API Version == 7 支持 ArkTS 、 JS 和 Java
  • API Version < 7 支持 JS 和 Java

所以我们不能简单的修改 compileSdkVersioncompatibleSdkVersion 的版本,对于我们初学者,如果出现这个问题,建议重新创建一个新的工程。

新建项目时 Compile Sdk 应该选择与你运行的设备(模拟器和真机) apiVersion 相对应的版本号。

Q8.如何安装 Android 应用到鸿蒙的模拟器

我们可以使用 adb 命令安装,也可以点击 Android Studio 上运行按钮 图片 ,直接将 Android 应用安装到鸿蒙模拟器。

但是我们需要修改 Android 项目支持的 CPU/API 版本。因为 Harmony 的模拟器 CPU/API 是 x86,所以需要在 build.gradle 文件中添加 x86 的支持。

1
2
3
4
5
6
7
8
android {
compileSdkVersion 33
defaultConfig {
ndk {
abiFilters 'x86_64','x86'
}
}
}