HarmonyOS应用一之登录页面案例

news/2024/10/18 6:13:45/

目录:

    • 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装饰自定义组件。


http://www.ppmy.cn/news/1508870.html

相关文章

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时&#xff0c;对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力&#xff0c;还能帮助用户快速识别和区分不同类别的数据&#xff0c;增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…

挖矿木马简介

挖矿木马简介 • 挖矿&#xff08;Mining&#xff09;&#xff0c;早期与比特币有关&#xff0c;用户使用个人计算机下载软件&#xff0c;然后运行特定的算法&#xff0c;与远方服务器通信后得到相应比特币&#xff0c;挖矿就是利用比特币挖矿赚取比特币 • 由于挖矿成本过于…

Spring Boot集成protobuf快速入门Demo

1.什么是protobuf&#xff1f; Protobuf&#xff08;Protocol Buffers&#xff09;是由 Google 开发的一种轻量级、高效的数据交换格式&#xff0c;它被用于结构化数据的序列化、反序列化和传输。相比于 XML 和 JSON 等文本格式&#xff0c;Protobuf 具有更小的数据体积、更快…

Spring MVC 扩展和SSM框架整合

Spring MVC框架处理JSON数据 JSON格式数据在现阶段的web项目开发中扮演着非常重要的角色。在前端页面和后台交互的过程中&#xff0c;需要一种格式清晰、高效且两端都可以轻松使用的数据格式做交互的媒介&#xff0c;JSON正可以满足这一需求 JSON&#xff08;JavaScript Object…

【随笔】Java 连接操作FTP与SFTP 详细指南

引言 在Java开发中&#xff0c;文件传输协议&#xff08;FTP&#xff09;和安全文件传输协议&#xff08;SFTP&#xff09;是处理文件传输的两种常见方式。FTP是标准的网络文件传输协议&#xff0c;而SFTP则在FTP基础上增加了安全层&#xff08;SSH&#xff09;&#xff0c;提…

4章8节:用R做数据重塑,行列命名和数据类型转换

在R语言中,行列命名和数据类型转换是数据处理中的两个基础性操作。它们不仅对数据的可读性和组织性至关重要,而且在执行数据分析、模型构建和结果解释时也扮演着重要的角色。 一、行和列命名 在数据科学和统计分析中,命名是组织和管理数据的一个重要部分。尤其是在处理复杂…

LVS的12种调度算法详解

1.lvs调度算法类型 1.1静态方法 仅根据算法本身进行调度&#xff0c;不考虑RS的负载情况 1.2动态方法 主要根据每RS当前的负载状态及调度算法进行调度Overheadvalue较小的RS将被调度 1.1lvs静态调度算法 1.1.1RR&#xff08;轮询算法&#xff09;&#xff1a; roundrobin 轮…

媒体优质翻译对中国产品在美国推广的影响

随着中国公司越来越多地瞄准美国市场&#xff0c;媒体内容的高质量翻译的重要性怎么强调都不为过。有效地翻译不仅仅是将单词从一种语言转换为另一种语言&#xff1b;这是关于传达正确的信息、语气和文化细微差别。高质量的翻译通过提高品牌知名度、增加客户参与度和推动销售&a…