鸿蒙开发实战:鸿蒙应用开发中的页面管理工具类详解

news/2024/11/14 8:47:09/文章来源:https://www.cnblogs.com/bkbk1234/p/18545225

一、引言

在鸿蒙应用开发的征程中,如何高效地管理页面布局与显示,以满足用户对于沉浸式体验、个性化 StatusBar 颜色等界面特性的需求,一直是开发者们关注的焦点。为此,我特别设计了一款实用的“页面管理工具类”,它具备强大的功能,能帮助开发者轻松应对各种页面管理挑战。

二、页面管理工具类:你的界面掌控利器

页面管理工具类如同一位界面掌控的利器,为开发者提供了一系列专业的静态属性与方法。借助这些功能,开发者能够轻松获取页面的关键信息,如顶部安全区域高度、底部安全区域高度,以及全屏开发状态和状态栏颜色等。这一工具类无疑是鸿蒙应用开发中不可或缺的一部分。

三、核心属性大揭秘

顶部安全区域高度(状态栏高度)

变量名:static statusBarHeight: number = 0

解读:这一属性帮助开发者快速获取顶部安全区域的高度,即状态栏的高度。通过掌握状态栏占用的屏幕空间,开发者能够更精准地布局页面内容,确保内容不会被遮挡。

底部安全区域高度

变量名:static navigationBarHeight: number = 0

解读:此属性代表底部安全区域的高度,通常对应于导航栏的高度。通过了解这一数值,开发者能够避免页面内容与导航栏重叠,提升用户体验。

全屏开发状态

变量名:static isFullScreenLayout: boolean

解读:这一属性用于判断应用是否处于全屏开发状态。当设置为true时,应用将忽略系统 UI 元素,实现真正的全屏效果;当设置为false时,应用将考虑这些 UI 元素的存在。

当前状态栏内容颜色

变量名:static statusBarContentColor: string

解读:开发者可以通过此属性获取或设置当前状态栏的内容颜色,使状态栏与应用的整体风格保持一致,提升应用的视觉效果和用户体验。

应用主窗口

变量名:static appMainWindow: window.Window

解读:此属性提供了应用主窗口的引用,使开发者能够直接访问主窗口的各种属性和方法,从而实现对窗口的精确控制和管理。

四、初始化方法:轻松启动你的界面掌控之旅

页面管理工具类提供了初始化方法,开发者只需传入相应的参数,即可轻松启动这一工具类。在初始化过程中,工具类会自动获取主窗口对象、设置全屏开发状态,并计算顶部和底部安全区域的高度,为后续的页面布局与管理提供基础数据。

五、实用方法集锦

页面管理工具类还提供了一系列实用的方法,如设置状态栏的透明度、调整导航栏的样式等。这些方法不仅功能强大,而且易于使用,能够帮助开发者快速实现各种界面效果。

六、功能要点分析

setWindowLayoutFullScreen(fullScreen: boolean):

该方法用于控制应用窗口是否全屏显示。

如果appMainWindow存在,则调用其setWindowLayoutFullScreen方法,并传入fullScreen参数。

setStatusBarLightContent 和 setStatusBarDarkContent:

这两个方法分别用于快速设置状态栏文字颜色为白色和黑色。

实际上是调用了setStatusBarContentColor方法并传入相应的颜色值。

setStatusBarContentColor(color: string):

该方法用于设置状态栏文字颜色。

首先检查传入的color是否与当前statusBarContentColor相同,如果相同则直接返回,避免不必要的操作。

如果颜色不同,则更新statusBarContentColor的值,并调用appMainWindow的setWindowSystemBarProperties方法设置状态栏文字颜色。

setStatusBarColor(color: string):

该方法用于设置状态栏背景色。

如果appMainWindow存在,则调用其setWindowSystemBarProperties方法并传入状态栏背景色。

showStatusBar 和 hideStatusBar:

这两个方法分别用于显示和隐藏状态栏。

通过调用appMainWindow的setWindowSystemBarEnable方法,并传入相应的参数来控制状态栏的显示和隐藏。

七、整体代码展示

import window from '@ohos.window'
import { display } from '@kit.ArkUI'
import { UIUtil } from './UIUtil'

/**

  • 关于页面状态栏等
    */
    export class LibWindowHelper {
    // 顶部状态栏高度
    static statusBarHeight: number = 0;

// 底部导航栏高度
static navigationBarHeight: number = 0;

// 是否开启全屏布局
static isFullScreenLayout: boolean;

// 当前状态栏内容颜色
static statusBarContentColor: string;

// 应用主窗口对象
static appMainWindow: window.Window;

// 初始化方法
static initialize(windowStage: window.WindowStage, isFullScreen: boolean) {
// 获取应用主窗口对象
LibWindowHelper.appMainWindow = windowStage.getMainWindowSync();

// 设置全屏布局状态
LibWindowHelper.isFullScreenLayout = isFullScreen;// 如果开启全屏布局,则设置窗口为全屏模式
if (LibWindowHelper.isFullScreenLayout) {LibWindowHelper.appMainWindow.setWindowLayoutFullScreen(isFullScreen);
}// 获取顶部状态栏区域,并计算高度
let avoidAreaTop = LibWindowHelper.appMainWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
LibWindowHelper.statusBarHeight = Number(UIUtil.px2vp(avoidAreaTop.topRect.height).toPrecision(5));// 获取底部导航栏区域,并计算高度
let avoidAreaBottom = LibWindowHelper.appMainWindow.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR);
LibWindowHelper.navigationBarHeight = Number(UIUtil.px2vp(avoidAreaBottom.bottomRect.height).toPrecision(5));// 监听折叠屏状态
LibWindowHelper.listenDisplayFoldStatus();

}

/**

  • 设置应用窗口全屏布局
  • @param fullScreen 是否全屏显示
    */
    static setWindowLayoutFullScreen(fullScreen: boolean) {
    if (LibWindowHelper.appMainWindow) {
    LibWindowHelper.appMainWindow.setWindowLayoutFullScreen(fullScreen);
    }
    }

/**

  • 设置状态栏文字颜色为白色
    */
    static setStatusBarLightContent() {
    LibWindowHelper.setStatusBarContentColor('#ffffff');
    }

/**

  • 设置状态栏文字颜色为黑色
    */
    static setStatusBarDarkContent() {
    LibWindowHelper.setStatusBarContentColor('#000000');
    }

/**

  • 设置状态栏文字颜色
  • @param color 状态栏文字颜色
    */
    static setStatusBarContentColor(color: string) {
    // 避免不必要的操作,如果颜色未改变则直接返回
    if (color === LibWindowHelper.statusBarContentColor) {
    return;
    }
    LibWindowHelper.statusBarContentColor = color;
    if (LibWindowHelper.appMainWindow) {
    LibWindowHelper.appMainWindow.setWindowSystemBarProperties({
    statusBarContentColor: LibWindowHelper.statusBarContentColor
    });
    }
    }

/**

  • 设置状态栏背景色
  • @param color 状态栏背景颜色
    */
    static setStatusBarColor(color: string) {
    if (LibWindowHelper.appMainWindow) {
    LibWindowHelper.appMainWindow.setWindowSystemBarProperties({
    statusBarColor: color
    });
    }
    }

/**

  • 显示状态栏
    */
    static showStatusBar() {
    if (LibWindowHelper.appMainWindow) {
    LibWindowHelper.appMainWindow.setWindowSystemBarEnable(['status', 'navigation']);
    }
    }

/**

  • 隐藏状态栏
    */
    static hideStatusBar() {
    if (LibWindowHelper.appMainWindow) {
    LibWindowHelper.appMainWindow.setWindowSystemBarEnable(['navigation']);
    }
    }

}
cyhh.mxy998.com,cyhh.gjkds.com,cyhh.mbslzp.com
cyhh.sh-soyun.com,cyhh.clzyfc.com

八、工具类使用说明与注意事项

使用说明

在EntryAbility.ts文件中,您可以按照以下步骤使用LibWindowHelper工具类来管理页面布局与显示:

  1. 初始化窗口辅助工具

当窗口阶段(windowStage)创建完成后,您需要利用该阶段来初始化LibWindowHelper。通过调用onWindowStageCreate方法并传入windowStage参数,您可以获取主窗口的引用,并使用LibWindowHelper.initialize方法进行初始化。

示例代码:

onWindowStageCreate(windowStage: window.WindowStage) {
windowStage.getMainWindow((err, mainWindow) => {
if (err) {
// 处理获取主窗口时发生的错误
console.error('获取主窗口时出错:', err);
} else {
// 初始化窗口辅助工具,设置全屏显示模式为true
LibWindowHelper.initialize(mainWindow, true);
}
});
}
cyhh.ousnled.com,cyhh.syshuangyihe.com,cyhh.eyeql.com
cyhh.xyfhm.com,cyhh.nc-lh.com

  1. 启用或禁用全屏显示

通过调用LibWindowHelper.setWindowLayoutFullScreen方法,您可以轻松地启用或禁用应用的全屏显示模式。传入true将启用全屏显示,而传入false则会禁用。

示例代码:

// 启用全屏显示
LibWindowHelper.setWindowLayoutFullScreen(true);

// 禁用全屏显示
LibWindowHelper.setWindowLayoutFullScreen(false);

  1. 设置状态栏文字颜色

当状态栏背景为深色时,您可能需要将状态栏的文字颜色设置为深色以提高可读性。使用LibWindowHelper.setStatusBarDarkContent方法即可实现。

示例代码:

// 设置状态栏文字为深色
LibWindowHelper.setStatusBarDarkContent();

  1. 自定义状态栏背景色

LibWindowHelper允许您通过setStatusBarColor方法自定义状态栏的背景色。只需传入一个十六进制颜色代码字符串即可。

示例代码:

// 设置状态栏背景色为深灰色
LibWindowHelper.setStatusBarColor('#333333');

  1. 控制状态栏的显示与隐藏

您可以使用LibWindowHelper提供的showStatusBar和hideStatusBar方法来控制状态栏的显示与隐藏。

显示状态栏示例代码:

// 显示状态栏
LibWindowHelper.showStatusBar();

隐藏状态栏示例代码:

// 隐藏状态栏
LibWindowHelper.hideStatusBar();

注意事项

请确保在调用LibWindowHelper的方法之前,已正确导入该类,并且该类已经在您的项目中可用。

在调用方法时,请仔细核对传入的参数是否正确,以及是否符合LibWindowHelper的文档说明。

若在调用方法时遇到错误,请仔细查看控制台输出的错误信息,并根据错误信息进行调试和修复。

全屏显示模式可能会影响应用的布局和用户体验,请在使用时谨慎考虑。

修改状态栏的样式和颜色可能会影响应用的整体视觉效果,建议在设计时保持与应用主题的一致性。

九、总结

页面管理工具类作为鸿蒙应用开发中的一款实用工具,为开发者提供了强大的页面布局与显示管理能力。通过掌握这一工具类的核心属性和方法,开发者能够轻松应对各种页面管理挑战,为用户带来更加优质、个性化的界面体验。希望本文能够帮助您更好地理解和使用页面管理工具类,为您的鸿蒙应用开发之旅增添更多助力。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

发布的网站代码修改,如何在生产环境中安全地修改已发布的网站代码

在生产环境中修改已发布的网站代码需要谨慎操作,以确保网站的稳定性和安全性。以下是具体步骤:备份网站:在修改前,备份当前的网站文件和数据库,确保数据安全。 使用FTP工具或数据库管理工具进行备份。创建测试环境:在本地或开发服务器上创建一个与生产环境一致的测试环境…

织梦网站在哪里修改图片的alt,如何在织梦后台或代码编辑器中修改图片的Alt属性

登录织梦后台:打开浏览器,输入织梦网站的后台地址,例如 http://yourdomain.com/dede。 输入管理员账号和密码,点击“登录”。进入内容管理:登录后,点击顶部菜单栏中的“内容”。 选择“文档管理”或“文章管理”。选择需要修改的文章:在文档管理页面中,找到需要修改的文…

修改网站模板布局的软件,如何使用专业的软件修改网站模板布局

使用专业的软件可以更高效地修改网站模板布局。以下是一些常用的软件及其使用方法:Adobe Dreamweaver:安装软件:从Adobe官网下载并安装Dreamweaver。 打开项目:使用Dreamweaver打开网站项目文件夹。 修改布局:在设计视图中拖放元素,调整布局。 保存文件:修改完成后,保存…

Mysql篇-三大日志

概述undo log(回滚日志):是 Innodb 存储引擎层生成的日志,实现了事务中的原子性,主要用于事务回滚和 MVCC。 redo log(重做日志):是 Innodb 存储引擎层生成的日志,实现了事务中的持久性,主要用于掉电等故障恢复; binlog (归档日志):是 Server 层生成的日志,主要…

客户端 web 测试

单功能测试 单功能: 软件程序或应用程序只提供一项核心功能或特性, 而不包含其他附加功能. 这些功能都是独立的.以测试登录功能为例, 要测试登录的话, 要先准备一些资料, 最常见的资料有产品的原型设计, 以及设计的时候的需求文档, 有了这些数据之后应该如何开展测试呢?要把这…

memtest86测试工具排查内存故障

该方法适用于服务器数量较多的场景,通过BMC挂载镜像文件逐个进行测试。 1、将memtest86-pro-usb.zip解压。2、打开BMC的Java控制台,在Virtual Media菜单中选择Virtual Storage3、在Virtual Storage对话框中,Logical Drive Type选择HD Image,然后选择本机的memtest86-pro-us…

Microsoft System Center 2025 Multilanguage - Windows 服务器管理软件

Microsoft System Center 2025 Multilanguage - Windows 服务器管理软件Microsoft System Center 2025 Multilanguage - Windows 服务器管理软件 Windows 服务器部署、配置、管理和监控软件 请访问原文链接:https://sysin.org/blog/microsoft-system-center-2025/ 查看最新版。…

dotnet 记龙芯麒麟教育版安全中心拦截文件 导致 docker 内 CI CD 构建失败

本文记录我在龙芯旧世界的麒麟教育版系统上,使用 docker 对 dotnet 进行构建和打包过程中,因为安全中心拦截而出现奇怪的问题以下是我打包构建过程中遇到的文件没权限或被占用或 Mutex 失败等信息 使用 GitLab Runner 拉取项目时,遇到的报错信息如下 Running with gitlab-ru…

dotnet 9 WPF 连字符渲染支持

连字符渲染功能是 WPF 呼声很高的一个功能,核心需求方是使用 Visual Studio 的开发者们。开发者们期望使用连字符的时候可以进行连字符渲染,让开发过程中的视觉效果更加。于是作为 Visual Studio 的基础设施的 WPF 就要承担此功能的实现。经过漫长的开发,终于在 dotnet 9 里…

读数据质量管理:数据可靠性与数据质量问题解决之道03数据目录

数据目录1. 同步数据 1.1. 不同的数据仓库和数据湖通过数据集成层来进行桥接 1.2. AWS Glue、Fivetran和Matillion等数据集成工具从不同来源收集数据,统一这些数据,并将其转换为上游来源 1.3. 数据集成的一个典型用例是收集数据湖的数据并以结构化格式将其加载到数据仓库中 1…

内视图和跨视图几何知识进行立体匹配

内视图和跨视图几何知识进行立体匹配几何知识已被证明对立体匹配任务有益。然而,之前将几何见解整合到立体匹配算法中的尝试,主要集中在单个图像的几何知识上,而忽略了遮挡和匹配唯一性等关键的交叉视图因素。为了解决这一差距,提出了一种新的内视图和跨视图几何知识学习网…

RHEL9.4上创建RockyLinux9.4虚拟机

日期:2024.11.13 计划:在LANbridge网段里安装RockyLinux9.4虚拟机,IP地址10.31.0.1,用于搭建dhcp服务器 参照:鸟哥Linux私房菜 马哥教育王晓春老师课程TOPO结构如图之前安装rhle8的时候写了自动化安装的脚本,现在只需要简单修改一下再执行,无需手动编辑xml文件,就可以创…