一、创建ArkTS工程

在菜单栏选择File > New > Create Project来创建一个新工程。选择Application应用开发,选择模板“Empty Ability”,点击Next进行下一步。 创建ArkTS工程

进入配置工程界面,Compile SDK选择“4.1.0(11)”,其他参数保持默认设置即可。其中Node用来配置当前工程运行的Node.js版本,可选择使用已有的Node.js或下载新的Node.js版本。

配置工程选项

二、编写页面代码

在ets目录下的pages目录中创建Index.ets和Second.ets代码文件。 Index.ets文件源码:

  1. import { router } from '@kit.ArkUI';
  2. import { BusinessError } from '@kit.BasicServicesKit';
  3. //Index.ets
  4. @Entry
  5. @Component
  6. struct Index {
  7. @State message: string = 'Hello World';
  8. build() {
  9. Row() {
  10. Column() {
  11. Text(this.message)
  12. .fontSize(50)
  13. .fontWeight(FontWeight.Bold)
  14. //添加按钮
  15. Button(){
  16. Text('Next')
  17. .fontSize(30)
  18. .fontWeight(FontWeight.Bolder)
  19. }
  20. .type(ButtonType.Capsule)
  21. .margin({
  22. top: 20
  23. })
  24. .backgroundColor('#0D9FFB')
  25. .width('40%')
  26. .height('5%')
  27. .onClick(() => {
  28. console.info('点击Next按钮')
  29. router.pushUrl({url:'pages/Second'}).then(() => {
  30. console.info('成功跳转到第2页')
  31. }).catch((err:BusinessError) => {
  32. console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`)
  33. })
  34. })
  35. }
  36. .width('100%')
  37. }
  38. .height('100%')
  39. }
  40. }

@Entry修饰符类似于java中的注解,被这个注解修饰的组件表示它是一个页面的入口。什么叫“页面的入口”?简单的说,它就是一个可以直接显示在设备上的页面。因为,ArkUI支持自定义组件,我们可以封装一些组件达到复用目的,在我们封装的这些组件中可能是一个页面一个局部,就类似于Android中的Fragment一样,Fragment是要依赖于Activity而存在的,并不能独立的直接显示在设备上。通过这样的类比可知,被@Entry修饰的组件就类似于Android中的Activity,除此之外的组件就类似于Android中的Fragment,例如被@Component修饰的组件。所以,被@Entry修饰的组件也要像Android中的Activity一样在AndroidManifest.xml文件中进行登记说明,只不过ArkUI中是在main_pages.json中进行登记说明。

@State是一个状态修饰符,ArkUI是基于MVVM模式的,通过数据的双向绑定来实现UI的更新。只要是被这个修饰符修饰过的变量的值在改变时都会触发build()方法的执行实现页面的刷新。

怎样设置指定的页面为第一个启动页面呢?方法:找到路径ets/entryability/下的EntryAbility.ets文件即可修改。详见下图:

如何修改启动页面

Second.ets源码文件:

  1. import { router } from '@kit.ArkUI'
  2. import { BusinessError } from '@kit.BasicServicesKit'
  3. @Entry
  4. @Component
  5. struct Second{
  6. @State message: string = 'Hi there'
  7. build() {
  8. Row(){
  9. Column(){
  10. Text(this.message)
  11. .fontSize(50)
  12. .fontWeight(FontWeight.Bold)
  13. Button(){
  14. Text('Back')
  15. .fontSize(30)
  16. .fontWeight(FontWeight.Bold)
  17. }
  18. .type(ButtonType.Capsule)
  19. .backgroundColor('#0D9FFB')
  20. .width('40%')
  21. .height('5%')
  22. .onClick(() => {
  23. console.info('点击了返回键')
  24. try {
  25. router.back()
  26. console.info('成功返回第1页')
  27. } catch (err) {
  28. let code = (err as BusinessError).code;
  29. let message = (err as BusinessError).message;
  30. console.error(`Failed to return to the first page.Code is ${code}, message is ${message}`)
  31. }
  32. })
  33. }
  34. .width('100%')
  35. }
  36. .height('100%')
  37. }
  38. }

entry > src > main > resources > base > profile目录中的main_pages.json文件中配置页面路由信息,如下:

  1. {
  2. "src": [
  3. "pages/Index",
  4. "pages/Second"
  5. ]
  6. }

三、最后,真机运行截图如下:

真机运行