鸿蒙启动页开发

鸿蒙启动页开发

1.1 更改应用名称和图标

1.更改应用图标

  1. 找到moudle.json5文件,找到应用启动的EntryAbility下面的icon,将原来的图标改成自己设置的即可

2.更改应用名称

3.效果展示

2.1 广告页面开发

3.1 详细介绍

3.1.1 启动页面

ts 复制代码
import { PrivacyDialog } from '../views/components/PrivacyDialog'
import { router, window } from '@kit.ArkUI'
import { preferences } from '@kit.ArkData'
import { common } from '@kit.AbilityKit'

@Entry
@Component
struct launchPage {
  //获取应用的上下文
  context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext
  //获取页面的上下文
  // context:Context = getContext()
  @State
  isStore: boolean = true

  aboutToAppear(): void {
    window.getLastWindow(getContext()).then(win => {
      win.setWindowLayoutFullScreen(true)
    })
    const store = preferences.getPreferencesSync(this.context, {
      'name': 'infoStore'
    })
    this.isStore = store.getSync('isStore', true) as boolean
    console.info(`userAction: ${this.isStore}`)
  }

  async saveInfo() {
    const store = preferences.getPreferencesSync(this.context, {
      'name': 'infoStore'
    })
    store.putSync('isStore', false)
    store.flush()
  }

  //在页面出现之后:需要展示弹窗
  onPageShow(): void {
    //isStore用于定义是否保存的标识  如果显示true,就不用打开自定义弹窗,直接跳到广告界面
    // promptAction.showToast({
    //   message: this.isStore+''
    // })
    if (this.isStore) {
      this.controller.open()
    } else {
      //跳到广告界面
      router.pushUrl({
        url: 'pages/AdvertisementPage'
      })
    }

  }

  // context:Context:getContext()
  controller: CustomDialogController = new CustomDialogController({
    builder: PrivacyDialog({
      cancel: () => {
        this.context?.terminateSelf()
        //不同意关闭应用

      },
      confirm: () => { //当你点击同意,就会调用saveInfo方法
        this.saveInfo()
        //TODO 跳到广告页面
        router.pushUrl({
          url: 'pages/AdvertisementPage'
        })
      },

    }),
    alignment: DialogAlignment.Bottom, //基准位置
    // offset:{dx:30,dy:30}
  }
    //设置弹窗位置

  )

  build() {
    Stack() {
      //设置第一层
      Image($r('app.media.back'))
      Column({ space: 10 }) {
        Image($r('app.media.study_app'))
          .width(80)
          .aspectRatio(1)
        Text('健康学习')
          .fontSize(20)
          .fontWeight(FontWeight.Bold)
        Text('学习总有新玩法')
          .fontWeight(FontWeight.Bold)
      }.width('100%')
      .height('100%')
      .padding({
        top: 100
      })
    }
    .height('100%')
    .width('100%')
  }
}

3.1.2 自定义弹层

ts 复制代码
import { router } from '@kit.ArkUI'

@Preview
@CustomDialog
export struct PrivacyDialog {
  controller:CustomDialogController = new CustomDialogController({builder: ''})
  //定义两个用来接收的方法
  cancel:Function = ()=>{}
  confirm:Function = ()=>{}
  build() {

    Column(){
      Text('欢迎使用我的应用')
      Text('我们充分尊重用户的隐私权,并按照法律要求和业界成熟的安全标准,为您的个人信息提供相应的安全保护措施。')
      Text('协议隐私保护声明')
        .fontColor('#007fdd')
        .onClick(()=>{
          // TODO
          router.pushUrl({url:''})
        })
      Text('(以下简称为"本声明")以便您了解我们如何搜集、使用、披露、保护、存储、及传输您的个人数据。请您仔细阅读本声明。如您有任何疑问,请告知我们。')
      Row(){
        Text('不同意').fontColor('#007fdd')
          .onClick(()=>{
            this.controller.close()   //点击不同意,关闭
            this.cancel()
          })
        Blank()
        Text('同意').fontColor('#007fdd')
          .onClick(()=>{
            this.controller.close()
            this.confirm()
          })
      }.width('70%')
    }

  }
}

3.1.3 广告页面

ts 复制代码
import { router, window } from '@kit.ArkUI'

@Entry
@Component
struct AdvertisementPage {
  @State time: number = 5
  @State timeID: number = -1

  aboutToAppear(): void {
    window.getLastWindow(getContext()).then(win => {
      win.setWindowLayoutFullScreen(true)
    })
  }

  onPageShow(): void {

    this.timeID = setInterval(() => {
      console.log('test', this.time)
      if (this.time > 0) {
        this.time--
      } else if (this.time == 0) {
        clearTimeout(this.timeID)
        router.pushUrl({
          url: 'pages/Index'
        })
      }

    }, 1000)


  }

  build() {

    Stack() {
      Image($r('app.media.back'))
      Row() {
        Text('跳过广告' + this.time + 's')
          .fontSize(20)
          .backgroundColor('rgba(0,0,0,0.1)')
          .padding(8)
          .borderRadius(30)
      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.End)
      .alignItems(VerticalAlign.Top)
      .padding({
        top: 30,
        right: 30
      })

      Row({ space: 10 }) {
        Image($r('app.media.study_app'))
          .width(80)
          .aspectRatio(1)
        Column({ space: 5 }) {
          Text('健康学习')
            .fontSize(30)
          Text('学习总有新玩法')
            .fontSize(20)
        }.height(80)
        .justifyContent(FlexAlign.Start)

      }
      .width('100%')
      .height('100%')
      .justifyContent(FlexAlign.Center)
      .alignItems(VerticalAlign.Bottom)
      .padding({
        bottom: 16
      })

    }

    .height('100%')
    .width('100%')

  }
}
相关推荐
Hacker_DL8 小时前
7. 从网络获取数据
华为·harmonyos
程序猿阿伟9 小时前
《HarmonyOS Next × ArkTS框架:从AI模型压缩到智能家居控制的端侧开发指南》
人工智能·智能家居·harmonyos
mengweijin12 小时前
华为 Open Gauss 数据库在 Spring Boot 中使用 Flyway
数据库·spring boot·华为·flyway·gauss
jklinux13 小时前
OpenHarmony4.1-轻量与小型系统ubuntu开发环境
linux·ubuntu·harmonyos·openharmony
月上柳青17 小时前
openharmony-音频
harmonyos
陈无左耳、18 小时前
HarmonyOS学习第12天:解锁表格布局的奥秘
笔记·学习·harmonyos
猿六凯20 小时前
复旦大学计算机考研机试真题
考研·华为od·华为
高木的小天才20 小时前
HarmonyOS 中 Navigation 组件的应用困境与应对策略
华为·harmonyos
暮雪倾风21 小时前
【软件安装】非华为手机安装华为电脑管家(14.0.5.8 C233)(附带安装包下载地址)
华为·华为电脑管家