HarmonyOS开发实战(黑马健康系列一:欢迎页)

系列文章目录

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


文章目录

  • 系列文章目录
  • 前言
  • 一、核心代码
    • 1.WelcomePage.ets
    • 2.UserPrivacyDialog.ets
    • 3.页面效果
  • 总结
  • 扩展


前言

提示::

案例来源于b站的黑马课程


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

一、核心代码

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)等。

扩展

Column接口文档

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

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

相关文章

沐风老师3DMAX一键相框生成插件安装使用方法教程

3DMAX一键相框生成插件使用教程 3DMAX一键相框生成插件,用于根据导入的图像文件以正确的比例从选定的图像中快速创建相框。只需点击几下鼠标,它就可以同时创建多个相框,在尺寸、轮廓、颜色和玻璃方面有许多选项。 支持Corona、Vray和标准材质…

Java基础(运算符)

运算符 运算符和表达式 运算符:对字面量或者变量进行操作的符号 表达式:用运算符把字面量或者变量连接起来,符合java语法的式子就可以称为表达式;不同运算符连接的表达式体现的是不同类型的表达式。 算术运算符(加…

Unity 按下Play键后,Scene View里面一切正常,但是Game View中什么都没有 -- Camera Clear Flags的设置

问题如下所示。 最先遇到这个问题是我想用Unity开发一个VR 360-degree Image Viewer。在Scene View中可以看到球体,但是Game View什么都看不到。最后找到的原因是,我使用的shader是Skybox/Panorama, 需要把Main Camera的Clear Flags设置成Do…

灌区信息化解决方案-大型灌区信息化改造

系统方案 灌区信息化解决方案主要对灌区的水情、渠道流量、土壤墒情、气象等信息进行监测,对重点区域进行视频监控,同时对泵站、闸门进行远程控制,实现信息的测量、统计、分析、控制、调度等功能。为灌区管理部门科学决策提供了依据&#xff…

多组学+机器学习+膀胱癌+分型+建模

这是一个基于多组学机器学习的分型建模文章,这里我们大概介绍一下,这篇文章做了啥 一、研究背景 1、尿路上皮癌是高度恶性的肿瘤,预后差,死亡率高 2、没有明显有效的治疗方法,多数患者在免疫治疗中无法受益&#xf…

Java混淆的重要性

在软件开发领域,安全性与代码保护一直是备受关注的问题。特别是在Java这样的跨平台语言中,保护源代码的机密性和完整性显得尤为重要。Java混淆作为一种代码保护技术,其在现代软件开发中的地位日益凸显。本文将详细探讨Java混淆的重要性&#…

【网络安全】网络安全协议和防火墙

目录 1、网络层的安全协议:IPsec 协议族 (1)IP 安全数据报格式 (2)互联网密钥交换 IKE (Internet Key Exchange) 协议 2、运输层的安全协议:TLS 协议 3、系统安全:防火墙与入侵检测 1、网络…

addr2line + objdump 定位crash问题

目录 背景 godbolt汇编工具 tombstone ARM平台汇编知识 寄存器介绍 常见汇编指令 函数入参及传递返回值过程 入参顺序 变参函数 虚函数表 典型问题分析过程 Crash BackTrace Addr2line objdump 拓展 为什么SetCameraId函数地址偏移是40(0x28) 参考 背景 最近在…

kerberos:介绍

文章目录 一、介绍二、kerberos框架1、名词解释2、框架 三、优缺点四、其他认证机制1、SSL2、OAuth3、LDAP 一、介绍 Kerberos是一种计算机网络授权协议,主要用于在非安全网络环境中对个人通信进行安全的身份认证。这个协议由麻省理工学院(MIT&#xff…

软考-系统分析师-精要1

1、什么是软件需求 软件需求是指用户对系统在功能、行为、性能、设计约束等方面的期望。 软件需求是指用户解决问题或达到目标所需的条件或能力,是系统或系统部件要满足合同、标准、规范或其他正式规定文档所需具有的条件或能力,以及反映这些条件或能力…

Leetcode 118 杨辉三角

目录 一、问题描述二、示例及约束三、代码方法一:数学 四、总结 一、问题描述 给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。   在「杨辉三角」中,每个数是它左上方和右上方的数的和。 二、示例及约束 示例 1&#xff1a…

电子防潮柜出厂前要经过哪些测试?

电子防潮柜在发货前应执行一系列质量控制测试以确保其功能正常、性能稳定且能够满足用户存储物品对湿度控制的需求。以下是沐渥电子防潮柜出厂前的测试流程: 1)除湿性能测试:检查并验证防潮柜能否按照设定的湿度目标值准确运行,可…

燃冬之yum、vim和你

了解了很多指令和权限,搞点真枪实弹来瞅瞅 学Linux不是天天就在那掰扯指令玩,也不是就研究那个权限 准备好迎接Linux相关工具的使用了么码农桑~ yum 软件包 什么是软件包呢? 首先来举个生活中常见点的例子:比如我的手机是华为…

盘点数据资产管理十大活动职能 优化企业数据资产管理和应用

在当今的数字化时代,数据已成为企业最宝贵的资产之一,在上篇文章中我们对数据资产管理进行了初步的介绍。 上篇文章指路👉什么是数据资产管理?详谈数据资产管理的难点与发展现状! 有效的数据资产管理不仅能提升企业的…

【JAVA】阿里技术官耗时三个月整理的Java核心知识点

在裁员风波的席卷之下,IT行业弥漫着浓厚的焦虑和不安。面对如此动荡的环境,一个共识日益凸显:提升个人价值至关重要。 这不仅仅是指薪资上的数字增长,更重要的是在职场中、在专业领域、在技术上不断取得突破,并塑造自…

固态继电器:推进可再生能源系统

随着可再生能源系统的发展,太阳能系统日益成为现代能源解决方案的先锋。在这种背景下,固态继电器(SSR),特别是光耦固态继电器的利用变得日益突出。本文旨在深入探讨SSR在可再生能源系统中的多方位应用,重点…

ClickHouse 数据类型、表引擎与TTL

文章目录 数据类型注意事项 表引擎1.TinyLog 引擎2.MergeTree 引擎3.ReplacingMergeTree 引擎4.AggregatingMergeTree 引擎5.SummingMergeTree 引擎6.CollapsingMergeTree 引擎7.Distributed 引擎 TTL列级 TTL表级TTL 数据类型 ClickHouse 数据类型Java 数据类型数据范围UInt8…

基于FaceNet的人脸识别

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计10077字,阅读大概需要10分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#…

Python二进制文件转换为文本文件

👽发现宝藏 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在日常编程中,我们经常会遇到需要将二进制文件转换为文本文件的情况。这可能是因…

最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版 土堆教程

最详细的 Windows 下 PyTorch 入门深度学习环境安装与配置 CPU GPU 版 | 土堆教程 Windows 下 PyTorch 入门深度学习环境安装与配置 GPU 版 教程大纲如何使用此教程快速开始版本 Windows下判断有无NVIDIA GPU安装Anaconda作用流程下载安装 Anaconda 创建虚拟环境利用conda或者…