HarmonyOS编程实践系列:第一节 - 创建健康App欢迎页

系列文章目录

(零)鸿蒙HarmonyOS入门:如何配置环境,输出“Hello World“
(一)鸿蒙HarmonyOS开发基础
(二)鸿蒙HarmonyOS主力开发语言ArkTS-基本语法
(三)鸿蒙HarmonyOS主力开发语言ArkTS-状态管理
(四)鸿蒙HarmonyOS主力开发语言ArkTS-渲染控制
(五)鸿蒙HarmonyOS主力开发语言ArkTS-数据懒加载(LazyForEach)


文章目录

  • 系列文章目录
  • 前言
  • 一、核心代码
    • 1.WelcomePage.ets
    • 2.UserPrivacyDialog.ets
    • 3.页面效果
  • 总结
  • 知识补充
    • @ohos.data.preferences (用户首选项)
    • 其他


前言

提示::

案例来源于b站的课程


提示:以下是本篇文章正文内容,下面案例可供参考

一些工具类、资源文件可从下面的仓库获取。

Gitee仓库

一、核心代码

1.WelcomePage.ets

import UserPrivacyDialog from '../view/welcome/UserPrivacyDialog'
import common from '@ohos.app.ability.common'
import PreferencesUtil from '../common/utils/PreferencesUtil'
import router from '@ohos.router'
@Extend(Text) function opacityWhiteText(opacity: number, fontSize: number = 10) {
  .fontSize(fontSize)
  .opacity(opacity)
  .fontColor(Color.White)
}

const USER_PRIVACY_KEY: string = 'userPrivacyKey'

@Entry
@Component
struct WelcomePage {
  // 获取上下文,用户退出APP
  context = getContext(this) as common.UIAbilityContext

  // 定义用户协议弹窗
  controller: CustomDialogController = new CustomDialogController({
    builder: UserPrivacyDialog({
      confirm: () => this.onConfirm(),
      cancel: () => this.exitApp()
    })
  })

  // 用户协议同意处理逻辑
   async onConfirm() {
    //   保存用户同意信息到首选项
    await PreferencesUtil.putPreferenceValue(USER_PRIVACY_KEY, true)
    //   跳转到首页
    this.jumpToIndex()
  }
  // 用户协议不同退出APP
  exitApp() {
    this.context.terminateSelf()
  }


  async aboutToAppear() {
    //读取用户首选项
    let isAgree = await PreferencesUtil.getPreferenceValue(USER_PRIVACY_KEY, false)
    // 同意则跳转首页
    if (isAgree) {
      this.jumpToIndex()
    } else {
      console.log('2222')
      // 不同意则继续打开用户协议
      this.controller.open()
    }
  }
  // 跳转到首页
  jumpToIndex() {
    setTimeout(() => {
      router.replaceUrl({
        url: 'pages/Index'
      })
    }, 1000)
  }
  build() {
    Column({ space: 10 }) {
      //中央
      Row() {
        Image($r('app.media.home_slogan'))
          .width(260)
      }.layoutWeight(1)


      Image($r('app.media.home_logo'))
        .width(150)
      Row() {
        // Text('技术支持').fontSize(12).opacity(0.8).fontColor(Color.White)
        Text('技术支持').opacityWhiteText(0.8,12)
        Text('IPV6')
          .fontSize(10)
          .opacity(0.8)
          .fontColor(Color.White)
          .border({ style: BorderStyle.Solid, width: 1, color: Color.White, radius: 15 })
          .padding({ left: 5, right: 5 })
        Text('网络').fontSize(12).opacity(0.8).fontColor(Color.White)


      }

      Text(`'减更多'指黑马健康APP希望通过软件工具的形式,帮助更多用户实现身材管理`)
        .fontSize(10)
        .opacity(0.6)
        .fontColor(Color.White)
      Text('蜀ICP备11013304号-1')
        .fontSize(10)
        .opacity(0.6)
        .fontColor(Color.White)
        .margin({ bottom: 35 })
    }
    .width('100%')
    .height('100%')
    .backgroundColor($r('app.color.welcome_page_background'))
  }
}

2.UserPrivacyDialog.ets

import { CommonConstants } from '../../common/constants/CommonConstants'
// @Preview
@CustomDialog
export  default  struct UserPrivacyDialog {
  controller :CustomDialogController

  // 定义空同意与不同方法,由调用方具体实现
  confirm: () => void
  cancel: () => void


  build() {
    Column({space:CommonConstants.SPACE_4}){
      Text($r('app.string.user_privacy_title'))
        .fontSize(20)
        .fontWeight(CommonConstants.FONT_WEIGHT_700)

      Text($r('app.string.user_privacy_content'))

      Button($r('app.string.agree_label'))
        .width(150)
        .backgroundColor($r('app.color.primary_color'))
        .onClick(() => {
          this.confirm()
          this.controller.close()
        })

      Button($r('app.string.refuse_label'))
        .width(150)
        .backgroundColor($r('app.color.lightest_primary_color'))
        .fontColor($r('app.color.light_gray'))
        .onClick(() => {
          this.cancel()
          this.controller.close()
        })
    }
  }
}

3.页面效果

在这里插入图片描述


总结

主要涉及到线性布局(Row/Column)、文本显示(Text/Span)、按钮(Button)、@ohos.data.preferences (用户首选项)、自定义弹窗等。

知识补充

@ohos.data.preferences (用户首选项)

为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。数据存储形式为键值对,键的类型为字符串型,值的存储数据类型包括数字型、字符型、布尔型以及这3种类型的数组类型。

:可以通过接口获取Preferences实例,使用callback或Promise异步回调。
:可以使用接口从内存中移除指定的Preferences实例,使用callback或Promise异步回调。
:可以使用接口从内存中移除指定的Preferences实例,使用callback或Promise异步回调。
:Preferences实例提供了获取和修改存储数据的接口,如get、getAll、put等。
总结内容:用户首选项提供了一种灵活、高效的数据处理方式,支持应用持久化轻量级数据,并对其修改和查询,有助于提高应用的性能和用户体验。

在这里插入图片描述

其他

Column接口文档
自定义弹窗文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/582880.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web3的可持续性:构建环境友好的去中心化系统

引言 随着全球对可持续发展和环境问题的日益关注,Web3技术作为一种新型的互联网模式,也开始受到社区和开发者的关注。但很少有人关注到Web3对环境可持续性的潜在影响。本文将探讨Web3如何构建一个环境友好的去中心化系统,以及这如何促进一个…

Python_AI库 Pandas的时间序列操作详解

Python_AI库 Pandas的时间序列操作详解 本文默认读者具备以下技能: 熟悉python基础知识,vscode或其它编辑工具 了解pandas,matplotlib的基础操作 具备自主扩展学习能力 在数据分析和处理中,时间序列数据是一类常见且重要的数据类型。大量的…

瓦片编辑器成功移植到小熊猫C++ 2.25.1版本,解决_findnext移植问题

移植之后出现绿色屏幕闪退 查了版本回滚直到不闪退,发现是在读取自定义文件上出问题 然后在找读取自定义文件函数,发现是读取图片部分出问题 然后就卡住了 调试半天,不是数据溢出,于是就看 函数_findnext,网上搜 ———_findn…

Nutch库入门指南:利用Java编写采集程序,快速抓取北京车展重点车型

概述 在2024年北京车展上,电动汽车成为全球关注的焦点之一。这一事件不仅吸引了全球汽车制造商的目光,也突显了中国市场在电动汽车领域的领先地位。117台全球首发车的亮相,其中包括30台跨国公司的全球首发车和41台概念车,彰显了中…

协程——uthread学习

协程——uthread学习 uthread说明细节 uthread代码 ucontext-人人都可以实现的简单协程库 github地址 vscode c调试环境搭建 程序员应如何理解协程 在此记录一下协程的基本概念,后续再考虑实现手写的协程。 uthread说明 一个简单的C用户级线程(协程&am…

解决Could not locate zlibwapi.dll. Please make sure it is in your library path问题

nvidia官网已经下架了zlibwapi.dll的下载链接,可以按照下面方法。 1、在windows目录C:\Program Files\Microsoft Office\root\Office16\ODBC Drivers\Salesforce\lib下找到zlibwapi.dll文件 (如果下载不到可通过百度云) 链接:https://pan.baidu.com/s…

宝塔面板自定义设置告警通知webhook接口推送内容

前提 为了能够使用宝塔面板的自定义推送webhook对接到自己的推送系统,特意修改面板代码来支持自定义的推送系统。 环境 宝塔:Linux面板8.1.0 效果 步骤 主要修改文件路径如下 /www/server/panel/class/msg/web_hook_msg.py 源文件地址 完整文件链…

如何解决Edge浏览器显示“你的组织浏览器已托管”,导致无法正常打开网页问题?

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

[ACTF2020 新生赛]BackupFile 1 [极客大挑战 2019]BuyFlag 1 [护网杯 2018]easy_tornado 1

目录 [ACTF2020 新生赛]BackupFile 1 1.打开页面,叫我们去找源文件 2.想到用disearch扫描,发现源文件index.php.bak 3.访问这个文件,下载一个文件,用记事本打开 4.翻译php代码 5.构造payload url/?key123,得到fl…

《与 Apollo 共创生态:我和 Apollo 7周年大会的心路历程》

目录 前言7周年大会开放协同写在最后 前言 Apollo开放平台的企业生态计划是一个激动人心的举措,它展现了Apollo团队长期以来的努力和成就。通过与全球开发者和合作伙伴的紧密合作,Apollo开放平台已经成为一个创新和技术交流的重要平台。企业生态计划的推…

LeetCode 104.二叉树的最大深度

题目描述 给定一个二叉树 root ,返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1: 输入:root [3,9,20,null,null,15,7] 输出:3示例 2: 输入:root [1,null,…

优化大型语言模型交互:提升查询和提示效果的26条原则

推荐下arxiv挂的一个提示词教程: https://github.com/VILA-Lab/ATLAS https://arxiv.org/abs/2312.16171 它提出了一套26条指导原则,改善和优化与大型语言模型(LLMs)的交互过程。通过这些原则,旨在简化对LLMs的查询和…

【软考高项】二十八、进度管理基础内容

一、管理基础 小型项目中,定义活动、排列活动顺序、估算活动持续时间及制定进度模型形成进度计划等过程的联系非常密切,可以视为一个过程,可以由一个人在较短时间内完成管理新实践 具有未完成项的迭代型进度计划:适应型生命周期的滚动式…

信息系统管理

目录 一、信息系统管理范围 1、规划和组织 2、设计和实施 ①、信息系统架构 Ⅰ、集中式架构 Ⅱ、分布式架构 Ⅲ、SOA(面向服务的系统架构) 3、运维和服务 ①、运行管理和控制 ②、IT服务管理 ③、运行与监控 Ⅰ、运行监控 Ⅱ、安全监控 4、…

Docker本地部署overleaf后,挖掘用户加密逻辑

overleaf的用户信息,保存在mongo数据库的users集合中。 用户密码则存在hashedPassword字段中 从开源的代码services\web\app\src\Features\Authentication\AuthenticationManager.js第303行可以找到密码加密逻辑。 本地可以通过下面的代码生成overleaf用户密码信息…

JAVA实现easyExcel批量导入

注解类型描述ExcelProperty导入指定当前字段对应excel中的那一列。可以根据名字或者Index去匹配。当然也可以不写,默认第一个字段就是index0,以此类推。千万注意,要么全部不写,要么全部用index,要么全部用名字去匹配。…

投资蓄能之际,九安医疗如何进一步稳固主业“压舱石”?

体外诊断行业的消费环境变化,正从相关企业的发展中体现。 据梳理,随着疫情检测需求回落,2023年以来,菲鹏生物、雅睿生物、中翰生物等体外诊断公司,陆续主动撤回上市申请。 而已上市公司也正处于周期性调整阶段。4月2…

MobileNetV4 论文学习

论文地址:https://arxiv.org/abs/2404.10518 代码地址:https://github.com/tensorflow/models/blob/master/official/vision/modeling/backbones/mobilenet.py 解决了什么问题? 边端设备的高效神经网络不仅能带来实时交互的体验&#xff0c…

(学习日记)2024.05.10:UCOSIII第六十四节:常用的结构体(os.h文件)第三部分

之前的章节都是针对某个或某些知识点进行的专项讲解,重点在功能和代码解释。 回到最初开始学μC/OS-III系统时,当时就定下了一个目标,不仅要读懂,还要读透,改造成更适合中国宝宝体质的使用方式。在学完野火的教程后&a…

设计模式——保护性暂停

同步模式之保护性暂停 文章目录 同步模式之保护性暂停定义实现应用带超时版 GuardedObject扩展——原理之join扩展——多任务版 GuardedObject 定义 即 Guarded Suspension,用在一个线程等待另一个线程的执行结果 要点 有一个结果需要从一个线程传递到另一个线程&…