当前位置: 首页 > news >正文

快速入门HarmonyOS应用开发(二)

目录

前言

1、创建闪屏页面

2、创建隐私协议弹窗

3、实现跳转逻辑

4、实现效果

前言

今天我们来实现一个项目中经常遇到的需求,点击应用图标进入闪屏页,之后弹出隐私协议弹窗,同意之后进入APP,拒绝之后退出APP。下面开始今天的内容,一起来看一下鸿蒙中该如何实现这样的功能吧!

 本示例完整代码请移步至:HarmonyDemos

1、创建闪屏页面

创建SplashPage,在该页面中同样的使用NavDestination作为页面根节点,由于是示例代码,所以这里就简单一点,页面中只放置了一个文本组件:

@Component
export struct SplashPage {@Consume(CommonConstant.PAGEINFO_KEY) pageStack: NavPathStackbuild() {NavDestination() {Column() {Text($r('app.string.splash_content')).fontSize($r('app.float.fp_20')).fontColor(Color.Blue).fontWeight(FontWeight.Bold)}.width(CommonConstant.FULL_PERCENT).height(CommonConstant.FULL_PERCENT).justifyContent(FlexAlign.Center)}.hideTitleBar(true)}
}

2、创建隐私协议弹窗

隐私弹窗我们使用NavDestination的Dialog模式来实现,参考:NavDestinationMode枚举说明

这里创建页面PrivacyPopupWindowPage,组件树里面实现从上到下依次为:标题、内容、操作按钮这种效果:

import { common } from "@kit.AbilityKit"
import { CommonConstant } from "../../constants/CommonConstant"@Component
export struct PrivacyPopupWindowPage {@Consume(CommonConstant.PAGEINFO_KEY) pageStack: NavPathStackbuild() {NavDestination() {Column() {Column() {Text($r('app.string.title_privacy_dialog')).width(CommonConstant.FULL_PERCENT).textAlign(TextAlign.Center).fontSize($r('app.float.fp_18')).fontColor($r('app.color.color_333')).padding({ top: $r('app.float.vp_12'), bottom: $r('app.float.vp_12') })Divider().color(Color.Black).opacity(CommonConstant.OPACITY_01).strokeWidth(CommonConstant.VP_05)Text($r('app.string.privacy_content')).width(CommonConstant.FULL_PERCENT).textAlign(TextAlign.Center).fontSize($r('app.float.fp_18')).fontColor($r('app.color.color_333')).padding({ top: $r('app.float.vp_16'), bottom: $r('app.float.vp_16') })Divider().color(Color.Black).opacity(CommonConstant.OPACITY_01).strokeWidth(CommonConstant.VP_05)Row() {Text($r('app.string.reject')).layoutWeight(CommonConstant.WEIGHT_1).padding({ top: $r('app.float.vp_12'), bottom: $r('app.float.vp_12') }).textAlign(TextAlign.Center).fontSize($r('app.float.fp_18')).fontColor($r('app.color.color_999'))Divider().color(Color.Black).opacity(CommonConstant.OPACITY_01).strokeWidth(CommonConstant.VP_05).height($r('app.float.vp_35')).vertical(true)Text($r('app.string.agree')).layoutWeight(CommonConstant.WEIGHT_1).padding({ top: $r('app.float.vp_12'), bottom: $r('app.float.vp_12') }).textAlign(TextAlign.Center).fontSize($r('app.float.fp_18')).fontColor($r('app.color.color_primiry'))}}.width(CommonConstant.PERCENT_70).height(CommonConstant.PERCENT_25).borderRadius($r('app.float.vp_8')).backgroundColor(Color.White)}.width(CommonConstant.FULL_PERCENT).height(CommonConstant.FULL_PERCENT).justifyContent(FlexAlign.Center)}.mode(NavDestinationMode.DIALOG).backgroundColor($r('app.color.color_transparent')).hideTitleBar(true).onBackPressed(() => {return true})}
}

3、实现跳转逻辑

需求:应用首先加载的是闪屏页面,在首次安装应用时,会弹出隐私协议弹窗,点击弹窗中的“退出”按钮时会退出应用,点击“同意”按钮时会记录按钮的同意之后进入应用,在下次进入应用时不会重新弹出隐私协议弹窗。

基于上述的逻辑,不难发现,我们需要本地存储用户是否点击同意的这一状态,这里我们可以使用HarmonyOS中为我们提供的数据持久化技术来实现,我们选择用户首选项这种存储技术,

参考文档:通过用户首选项实现数据持久化

对于这种经常用到的东西实际项目开发中一般都会封装成工具类,方便后续的调用。网上也有很多,这里给大家推荐一个网站:OpenHarmony三方库中心仓,关于首选项的封装这里我们参考harmony-utils这个库中的PreferencesUtil中的实现。

首先在PrivacyPopupWindowPage中隐私弹窗的拒绝和同意按钮上添加点击事件:

// 拒绝
.onClick(() => {this.pageStack.clear()this.context.terminateSelf()
})// 同意
.onClick(() => {PreferencesUtil.putSync(CommonConstant.PRIVACY_KEY, true)this.pageStack.pop(CommonConstant.PRIVACY_AGREED, false)
})

然后打开NavigationPage,修改上一篇中首次加载的页面为SplashPage:

aboutToAppear(): void {this.pageStack.pushPath({ name: PageConstant.PAGE_SPLASH }, false)}

最后在SplashPage中处理页面跳转逻辑:

// 延时2秒之后跳转到主页面startInterval() {setTimeout(() => {this.pageStack.replacePath({ name: PageConstant.PAGE_MAIN })}, CommonConstant.EXIT_TIME)}aboutToAppear(): void {let isAgree = PreferencesUtil.getSync(CommonConstant.PRIVACY_KEY, false)if (isAgree) {this.startInterval()} else {this.pageStack.pushPath({name: PageConstant.PAGE_PRIVACY_POPUP_WINDOW, onPop: (popInfo: PopInfo) => {if (popInfo && popInfo.result) {let flag = popInfo.result as stringif (flag === CommonConstant.PRIVACY_AGREED) {this.startInterval()}}}}, false)}}

4、实现效果

最终实现的效果如下:

启动页

完整代码:HarmonyDemos

OK,今天的内容就这么多了,下期再会!


文章转载自:

http://43hDwmzm.LLfwg.cn
http://Ltx5Rpjd.LLfwg.cn
http://PH6xCHF8.LLfwg.cn
http://hEpvchcP.LLfwg.cn
http://75V8wuoE.LLfwg.cn
http://LZL2sRGs.LLfwg.cn
http://OwQVigBx.LLfwg.cn
http://26394wZp.LLfwg.cn
http://PyJ8F0io.LLfwg.cn
http://MgFHGkFb.LLfwg.cn
http://keX35g2B.LLfwg.cn
http://lr2tk3gp.LLfwg.cn
http://0sgpFHqq.LLfwg.cn
http://FIUfCxJr.LLfwg.cn
http://xIqmv0Re.LLfwg.cn
http://kfYMR5ZC.LLfwg.cn
http://Y6Ez3eUP.LLfwg.cn
http://BBnY9de1.LLfwg.cn
http://a1HOk1QF.LLfwg.cn
http://SYU5yWP5.LLfwg.cn
http://S4Z0gRtK.LLfwg.cn
http://SHmukmuD.LLfwg.cn
http://DYHhKeYB.LLfwg.cn
http://x76UvVWq.LLfwg.cn
http://4Zwt518y.LLfwg.cn
http://YYjxETBr.LLfwg.cn
http://taVtmDc5.LLfwg.cn
http://bC6Gwnpl.LLfwg.cn
http://FwqBIKjV.LLfwg.cn
http://NrXMIZgG.LLfwg.cn
http://www.dtcms.com/a/388419.html

相关文章:

  • 绿联、极空间、飞牛NAS无需安装,实现快速远程访问
  • Datawhale 理工科-大模型入门实训课程 202509 第1次作业
  • 城市治理综合管理平台
  • 《嵌入式硬件(十三):基于IMX6ULL的增强型中断周期定时器(EPIT)操作》
  • PM2 入门指南与常用命令(含 开机自启、Node.js 及 Java 服务部署)
  • 汽车多核架构中内存系统故障检测的改进算法
  • C++真的比Python更快吗?
  • 【实操分享】使用 SeeDream 4.0 进行 AI 修图——开启专属“AI 云旅拍”
  • 不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
  • Python中正则的三个基础方法
  • 最外层的项目没有父pom配置文件,有很多子模块(maven项目)导入idea中,左侧模块显示不全问题解决
  • 前端将一个 DOM 元素滚动到视口顶部
  • 前端-防重复点击/防抖的方案
  • doris数据库问题
  • PyQt5中实现只读QLineEdit控件的完整指南
  • 金融工程vs金融数学:谁更贴近量化交易?
  • LeetCode 167.两数之和 II - 输入有序数组
  • 小杰机器学习高级(one)——激活函数——sigmoid、tanh、Relu、Leaky Relu、Prelu、ELU、softmax
  • OpenAI原生调用 vs LangChain调用方式的关系
  • [Token剪枝]Token Cropr: 针对众多任务的更快ViT, CVPR2025
  • NW725NW743美光固态闪存NW727NW734
  • 【Linux】归档、压缩、用户管理
  • Lattice FPGA 开发流程(以 ECP5 为例)
  • 大模型实战应用指南:从GPT-4.5到LLaMA的行业解决方案
  • 告别人工标注瓶颈!Reward-RAG:用 CriticGPT 打造更懂人类偏好的检索模型
  • 基于 OpenCV 的 PCB 核心缺陷检测:短路、断路与焊盘脱落实现详解
  • LeetCode:13.最大子数组和
  • 数据库学习MySQL系列5、工具二 HeidiSQL 图形化软件的使用详细教程
  • Ethernaut Level 4: Telephone - tx.origin vs msg.sender 身份验证绕过
  • RWA开启数字时代的文化价值新纪元