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

HarmonyOS应用一之登录页面案例

目录:

    • 1、代码示例
    • 2、代码分析
    • 3、注解分析

1、代码示例

实现效果:

在这里插入图片描述

/** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import { UIAbility, Want, AbilityConstant } from '@kit.AbilityKit';
import { window } from '@kit.ArkUI';
import { BusinessError, deviceInfo } from '@kit.BasicServicesKit';
import Logger from '../common/utils/Logger';
import CommonConstants from '../common/constants/CommonConstants';
import { GlobalContext } from '../common/utils/GlobalContext';/*** Lift cycle management of Ability.*/
export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam) {GlobalContext.getContext().setObject('abilityWant', want);GlobalContext.getContext().setObject('launchParam', launchParam);if (deviceInfo.deviceType !== CommonConstants.TABLET_DEVICE_TYPE) {window.getLastWindow(this.context, (err, data) => {if (err.code) {Logger.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));return;}let orientation = window.Orientation.PORTRAIT;data.setPreferredOrientation(orientation, (err) => {if (err.code) {Logger.error('Failed to set window orientation. Cause: ' + JSON.stringify(err));return;}Logger.info('Succeeded in setting window orientation.');});});}}onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this ability.Logger.info(CommonConstants.TAG_ABILITY, 'Ability onWindowStageCreate');windowStage.loadContent('pages/LoginPage', (err: BusinessError<void>, data) => {if (err.code) {Logger.error(CommonConstants.TAG_ABILITY, 'Load the content to failed ' + JSON.stringify(err));return;}Logger.info(CommonConstants.TAG_ABILITY, 'Loading the content to succeeded ' + JSON.stringify(data));});}
}

2、代码分析

2.1代码:
在这里插入图片描述

通过module.json5文件红框处查看入口代码文件。运行就跳入到登录页。

2.2代码:
在这里插入图片描述

程序执行onCreate函数先执行,其次onWindowStageCreate函数后执行。

  • onCreate:在 Ability 创建时被调用,用于执行初始化和设置业务逻辑。
  • onDestroy:在 Ability 销毁时触发,用于执行资源清理和其他清理操作。
  • onWindowStageCreate:在 WindowStage 创建完成后触发。
  • onWindowStageDestroy:在 WindowStage 销毁后触发。
  • onForeground:Ability 的生命周期回调,当应用从后台切换到前台时调用。
  • onBackground:Ability 的生命周期回调,当应用从前台切换到后台时调用。

生命周期

2.3代码:
在这里插入图片描述

 public register(): void {this.smListener = mediaquery.matchMediaSync(CommonConstants.WIDTH_CONDITION_SM);this.smListener.on('change', this.isDeviceSizeSM);this.mdListener = mediaquery.matchMediaSync(CommonConstants.WIDTH_CONDITION_MD);this.mdListener.on('change', this.isDeviceSizeMD);this.lgListener = mediaquery.matchMediaSync(CommonConstants.WIDTH_CONDITION_LG);this.lgListener.on('change', this.isDeviceSizeLG);}

在这里插入图片描述
在这里插入图片描述

在页面初始化时执行注册方法时里面使用监听器来监听屏幕的尺寸变化,并改变AppStorage里面的设备尺寸值。

2.4代码:
在这里插入图片描述

  • GridRow 为栅格容器组件,需与栅格子组件 GridCol 联合使用。
  • 设置一个GridCol占栅格布局的列数

代码介绍

2.5代码:
在这里插入图片描述
在这里插入图片描述
2.6代码:
在这里插入图片描述
直线绘制组件。

2.7代码:
在这里插入图片描述
在这里插入图片描述
oh-package-lock.json5文件中可以去引入包的依赖。

2.8代码:
在这里插入图片描述

页面跳转的router.pushUrl()方法。

3、注解分析

 @StorageProp('currentDeviceSize') currentDeviceSize: string = CommonConstants.SM;
  • @StorageProp:@StorageProp(key) 和AppStorage中key对应的属性建立单向数据同步
  • @StorageLink:@StorageLink(key) 和AppStorage中key对应的属性建立双向数据同步

注解的作用

页面生命周期:

即被@Entry装饰的组件生命周期。提供以下生命周期接口:

  • onPageShow: 页面每次显示时触发一次,包括路由过程、应用进入前台等场景,仅@Entry装饰的自定义组件生效。
  • onPageHide: 页面每次隐藏时触发一次,包括路由过程、应用进入前后台等场景,仅@Entry装饰的自定义组件生效。
  • onBackPress:当用户点击返回按时触发,仅@Entry装饰的自定义组件生效。

在这里插入图片描述

@Preview({title: 'Component',  //预览组件的名称deviceType: 'phone',  //指定当前组件预览渲染的设备类型,默认为Phonewidth: 1080,  //预览设备的宽度,单位:pxheight: 2340,  //预览设备的长度,单位:pxcolorMode: 'light',  //显示的亮暗模式,当前支持取值为lightdpi: 480,  //预览设备的屏幕DPI值locale: 'zh_CN',  //预览设备的语言,如zh_CN、en_US等orientation: 'portrait',  //预览设备的横竖屏状态,取值为portrait或landscaperoundScreen: false  //设备的屏幕形状是否为圆形
})

ArkTS应用/服务支持组件预览,要求compileSdkVersion为8或以上。组件预览支持实时预览,不支持动态图和动态预览。组件预览通过在组件前添加注解@Preview实现,在单个源文件中,最多可以使用10个@Preview装饰自定义组件。

相关文章:

HarmonyOS应用一之登录页面案例

目录&#xff1a; 1、代码示例2、代码分析3、注解分析 1、代码示例 实现效果&#xff1a; /** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance w…...

KubeSphere 部署 Kafka 集群实战指南

本文档将详细阐述如何利用 Helm 这一强大的工具&#xff0c;快速而高效地在 K8s 集群上安装并配置一个 Kafka 集群。 实战服务器配置(架构 1:1 复刻小规模生产环境&#xff0c;配置略有不同) 主机名IPCPU内存系统盘数据盘用途ksp-registry192.168.9.904840200Harbor 镜像仓库…...

手把手教你安装音乐制作软件FL Studio 24.1.1.4285中文破解版

在当今数字化时代&#xff0c;音乐创作不再局限于传统的乐器和录音室&#xff0c;而是借助先进的音乐制作软件&#xff0c;如FL Studio&#xff0c;实现了前所未有的便捷与高效。FL Studio&#xff0c;以其强大的功能、直观的界面和丰富的插件资源&#xff0c;成为了众多音乐制…...

SDL 与 OpenGL 的关系

OpenGL 和 SDL 是两个不同的库&#xff0c;但它们可以配合使用来创建图形应用程序。 SDL&#xff08;Simple DirectMedia Layer&#xff09; SDL 是一个跨平台的多媒体库&#xff0c;用于处理图形、声音、输入和其他游戏开发所需的功能。它简化了窗口创建、事件处理和图形上下…...

考研数学 线性代数----行列式与矩阵

核心框架 前置知识 正式内容 知识点1:单位矩阵 知识点2:可逆矩阵 知识点3: |A|与可逆 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识点: 知识…...

Golang实现简单的HTTP服务,响应RESTful请求判断形状大小

题目要求&#xff1a; 题目 1.shape 接口有面积Area() float64和 周长Perimeter()fioat64 两个法。为Circle Rectangle实现shape 接口。 2.实现isGreater(shape1&#xff0c;shape2 shape)boo1 函数&#xff0c;用于比较两个形状的大小,并使用单元测试验证 3.实现http.Handle…...

使用C语言构建Lua库

Lua 本身是用 C 语言编写的&#xff0c;因此使用 C 编写扩展可以更好地与 Lua 引擎集成&#xff0c;减少性能瓶颈&#xff0c;同时C 语言提供了对底层硬件和操作系统功能的直接访问能力&#xff0c;让 Lua 可以通过 C 扩展来实现对文件系统、网络等高级功能的支持。因为C 语言非…...

愤怒的江小白,这几年怎么了?

近日&#xff0c;东方甄选和江小白的纠纷引发了广泛关注。 8月8日晚间&#xff0c;东方甄选直播间中&#xff0c;主播天权在带货某款白酒产品时突然对比点评江小白产品&#xff0c;称江小白“不是白酒”&#xff1a;“你现在去看江小白的包装&#xff0c;上面是没有‘白酒’这…...

Unity教程(十)Tile Palette搭建平台关卡

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程&#xff08;零&#xff09;Unity和VS的使用相关内容 Unity教程&#xff08;一&#xff09;开始学习状态机 Unity教程&#xff08;二&#xff09;角色移动的实现 Unity教程&#xff08;三&#xff09;角色跳跃的实现 Unity教程&…...

如何防止员工私自拷贝公司内部文件?安企神帮你解决泄密之忧

在企业运营中&#xff0c;保护公司的机密信息至关重要。员工私自拷贝公司内部文件不仅可能导致商业秘密泄露&#xff0c;还可能损害公司的声誉和经济利益。下面我们将介绍一些有效的方法来防止这种情况的发生&#xff0c;并以“安企神”软件为例进行详细说明。 1. 明确规章制度…...

Linux应急响应检查工具

最近一直在优化的 linux 应急检查脚本&#xff0c;也是我一直在应急使用的工具 https://github.com/sun977/linuxcheckshoot 脚本包含两个检查工具&#xff0c;详情可看 README 或者 Banner linuxGun.sh 和 linuxcheck.sh 区别 1、linuxcheck.sh 是完整的 linux 系统检查脚本,…...

CP AUTOSAR标准之EEPROMAbstraction(AUTOSAR_SWS_EEPROMAbstraction)(更新中……)

1 简介和功能概述 EEPROM抽象层的功能、API和配置(见图1)。   图1:内存硬件抽象层模块概览   EEPROM抽象(EA)从设备特定的寻址方案和分段中抽象出来,并为上层提供虚拟寻址方案和分段以及“几乎”无限数量的擦除周期。 3 相关文献 3.1 输入文件 [1]基础软件模块列表AUTO…...

重启redis服务时报错:Failed to start redis.service: Unit not found

重启redis服务时报错&#xff1a;Failed to start redis.service: Unit not found redis配合安全修改了bind和auth配置&#xff0c;重启的时候报错了&#xff0c;试了很多方法&#xff0c;最后才通过日志解决了 1 重新加载systemd 配置并启动&#xff1a; sudo systemctl da…...

Hive3:识别内部表、外部表及相互转换

一、识别方法 查看内部表信息 desc formatted stu;查看外部表信息 desc formatted test_ext1;通过Table Type对应的值&#xff0c;我们可以区分外部表和内部表。 二、相互转换 内部表转外部表 alter table stu set tblproperties(EXTERNALTRUE);外部表转内部表 alter ta…...

Android笔试面试题AI答之Kotlin(7)

文章目录 29.简述Kotlin 中的内联类&#xff0c;什么时候需要内联类&#xff1f;内联类的特点何时需要内联类示例注意 30. 什么是 Coroutine Scope&#xff0c;它与 Coroutine Context 有什么不同&#xff1f;Coroutine Scope&#xff08;协程作用域&#xff09;Coroutine Cont…...

高辐照整车太阳辐照模拟系统试验舱

概览 高辐照整车太阳辐照模拟系统试验是一种模拟太阳辐照对汽车及其零部件影响的测试方法&#xff0c;主要用于评估汽车在长期日照条件下的性能和可靠性。该试验通常遵循特定的标准&#xff0c;如GB/T 2423.24-1995、DIN 75220、BMW PR306等&#xff0c;旨在模拟自然环境中的太…...

如何制作优秀的年终总结PPT?

制作优秀的年终总结PPT&#xff0c;是每位职场人士在年底时的一项重要任务。 一个优秀的年终总结PPT不仅能够清晰地展示你过去一年的工作成果&#xff0c;还能让领导对你的工作能力和态度留下深刻印象。 下面&#xff0c;我将从几个方面详细讲解如何制作这样的PPT&#xff0c…...

架构师第六周作业

目录 1.部署3节点mongodb复制集。 1.1 安装mongodb 1.2 部署复制集 2.部署3节点Kafka集群 1.部署3节点mongodb复制集。 1.1 安装mongodb MongoDB安装包下载 下载地址&#xff1a;https://www.mongodb.com/try/download/community 版本根据需求选择&#xff0c;Mongodb6.…...

解密Java中介者模式:代码实例带你深入理解

1. 引言&#xff1a;中介者模式的重要性 在软件设计的世界里&#xff0c;模块间的相互依赖往往会导致系统的复杂性和维护难度的增加。中介者模式&#xff08;Mediator Pattern&#xff09;作为一种行为设计模式&#xff0c;它的出现就是为了解决这一问题。通过引入一个中介者对…...

19c做好这件事,大幅提升Data Pump工作效率

老司机遇到的新问题 expdp是Oracle 10g引入的数据导出工具&#xff0c;能够提供并行、压缩及元数据导出等更多的功能&#xff0c;在后续的版本中逐渐替代了传统的数据导出工具exp&#xff0c;是数据库开发运维常用的工具之一。在我的印象中&#xff0c;这个工具除了诸如大量的…...

6种常用的AR跟踪方法

增强现实 (AR) 是一项令人着迷的技术&#xff0c;可将虚拟内容与现实世界无缝集成。实现这种无缝集成的关键组件之一是跟踪。各种类型的跟踪用于确定 AR 内容在环境中的准确位置和方向。本文介绍 AR 最常见的6种跟踪方法。 NSDT工具推荐&#xff1a; Three.js AI纹理开发包 - Y…...

HBO引爆血腥浪漫,尺度全开必看的影视剧推荐

一直以来我们的僵尸题材电影风靡全国&#xff0c;同时西方也创作出吸血鬼题材、丧尸题材的影视剧也是层出不穷&#xff0c;那今天我们就来探讨下吸血鬼题材的影视剧。 吸血鬼题材的影视剧&#xff0c;一直以来都是观众的宠儿。从光鲜亮丽的《暮光之城》到狗血多角恋的《吸血鬼日…...

【kubernetes】pod控制器详解

一、pod控制器概述 1、Pod控制器作用 Pod控制器&#xff0c;是用于实现管理pod的中间层&#xff0c;确保pod资源符合预期的状态&#xff0c;pod的资源出现故障时&#xff0c;会尝试进行重启&#xff0c;当根据重启策略无效&#xff0c;则会重新新建pod的资源。 2、pod控制器…...

Zookeeper学习、Tomcat

怎样使用Zookeeper实现服务发现&#xff1f; 典型回答 服务发现是ZK的重要用途之一&#xff0c;当我们想要基于zk实现服务发现时&#xff0c;一般可以参考以下步骤&#xff1a;1. 向Zookeeper注册服务 服务提供者需要在Zookeeper上创建一个临时节点来注册自己的服务。节点的名…...

软件测试基础知识与面试题最强总结(2024版)

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、什么是软件&#xff1f; 软件是计算机系统中的程序和相关文件或文档的总称。 二、什么是软件测试&#xff1f; 说法一&#xff1a;使用人工或自动的手段来运…...

ESP32播放网络音频文件

要使用ESP32播放网络上的音频文件&#xff0c;你可以通过以下步骤实现。ESP32可以使用Wi-Fi连接到互联网&#xff0c;下载音频文件并通过I2S接口输出音频数据。以下是一个示例&#xff0c;展示如何使用ESP32从URL获取音频文件并播放。 ESP32开发板。I2S DAC&#xff08;如MAX9…...

端到端 AWS 定量分析:使用 AWS 和 AWSCLI 自动运行脚本

使用 AWSCLI 启动、运行和关闭 AWS 服务器 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 欢迎来到雲闪世界。我们开发了两个 Python 脚本&#xff1b;一个用于为我们获取数据&#xff0c;另一个用于使用 sklearn 的决策树分类器处理数据。然后&#xf…...

数据结构与算法 - B树

一、概述 1. 历史 B树(B-Tree)结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database Systems》中的&#xff…...

Java二十三种设计模式-观察者模式(15/23)

观察者模式&#xff1a;实现对象间的松耦合通知机制 引言 在当今的软件开发领域&#xff0c;设计模式已成为创建可维护、可扩展和可重用代码的基石。在众多设计模式中&#xff0c;观察者模式以其独特的能力&#xff0c;实现对象间的松耦合通信而脱颖而出。本文将深入探讨观察…...

opencv-python图像增强二:图像去雾(暗通道去雾)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、简介&#xff1a;二、暗通道去雾方案简述&#xff1a;三、算法实现步骤3.1最小值滤波3.2 引导滤波3.3 计算图像全局光强 四&#xff1a;整体代码实现五&#xf…...