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

一、引言

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

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

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

三、核心属性大揭秘

  1. 顶部安全区域高度(状态栏高度)变量名:static statusBarHeight: number = 0解读:这一属性帮助开发者快速获取顶部安全区域的高度,即状态栏的高度。通过掌握状态栏占用的屏幕空间,开发者能够更精准地布局页面内容,确保内容不会被遮挡。
  2. 底部安全区域高度变量名:static navigationBarHeight: number = 0解读:此属性代表底部安全区域的高度,通常对应于导航栏的高度。通过了解这一数值,开发者能够避免页面内容与导航栏重叠,提升用户体验。
  3. 全屏开发状态变量名:static isFullScreenLayout: boolean解读:这一属性用于判断应用是否处于全屏开发状态。当设置为true时,应用将忽略系统UI元素,实现真正的全屏效果;当设置为false时,应用将考虑这些UI元素的存在。
  4. 当前状态栏内容颜色变量名:static statusBarContentColor: string解读:开发者可以通过此属性获取或设置当前状态栏的内容颜色,使状态栏与应用的整体风格保持一致,提升应用的视觉效果和用户体验。
  5. 应用主窗口变量名:static appMainWindow: window.Window解读:此属性提供了应用主窗口的引用,使开发者能够直接访问主窗口的各种属性和方法,从而实现对窗口的精确控制和管理。

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

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

五、实用方法集锦

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

六、功能要点分析

  1. setWindowLayoutFullScreen(fullScreen: boolean):该方法用于控制应用窗口是否全屏显示。如果appMainWindow存在,则调用其setWindowLayoutFullScreen方法,并传入fullScreen参数。
  2. setStatusBarLightContent 和 setStatusBarDarkContent:这两个方法分别用于快速设置状态栏文字颜色为白色和黑色。实际上是调用了setStatusBarContentColor方法并传入相应的颜色值。
  3. setStatusBarContentColor(color: string):该方法用于设置状态栏文字颜色。首先检查传入的color是否与当前statusBarContentColor相同,如果相同则直接返回,避免不必要的操作。如果颜色不同,则更新statusBarContentColor的值,并调用appMainWindow的setWindowSystemBarProperties方法设置状态栏文字颜色。
  4. setStatusBarColor(color: string):该方法用于设置状态栏背景色。如果appMainWindow存在,则调用其setWindowSystemBarProperties方法并传入状态栏背景色。
  5. showStatusBar 和 hideStatusBar:这两个方法分别用于显示和隐藏状态栏。通过调用appMainWindow的setWindowSystemBarEnable方法,并传入相应的参数来控制状态栏的显示和隐藏。

七、整体代码展示

import window from **********'
import { display } from **********'
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']);
    }
  }
  
}

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

使用说明

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);
        }
    });
}

2. 启用或禁用全屏显示

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

示例代码:

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

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

3. 设置状态栏文字颜色

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

示例代码:

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

4. 自定义状态栏背景色

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

示例代码:

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

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

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

显示状态栏示例代码:

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

隐藏状态栏示例代码:

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

注意事项

  • 请确保在调用LibWindowHelper的方法之前,已正确导入该类,并且该类已经在您的项目中可用。
  • 在调用方法时,请仔细核对传入的参数是否正确,以及是否符合LibWindowHelper的文档说明。
  • 若在调用方法时遇到错误,请仔细查看控制台输出的错误信息,并根据错误信息进行调试和修复。
  • 全屏显示模式可能会影响应用的布局和用户体验,请在使用时谨慎考虑。
  • 修改状态栏的样式和颜色可能会影响应用的整体视觉效果,建议在设计时保持与应用主题的一致性。

九、总结

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

全部评论

相关推荐

机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
头像 会员标识
06-11 01:02
门头沟学院 Java
今天不出意外,在晚上10点图书馆关门后,又是从10点聊到12点的夜晚,昨天聊到了12点40分。先说一下bg吧,本人26届学院本,Java路线,一段小厂实习,一段线上实习以及大二阶段的黑奴(所谓的功能需求点付钱),于今年5月份,辞职了一份转正但工资很低且没提升的小厂工作,想着根据自己现有的项目和经历做一次轻资产创业。从创业想法产生的那一天起,自己每晚常常睡不着觉,有时是因为明天要上班,去面对那索然无趣并且毫无交流和沟通的开发中,常因为互联网的唱衰Java和计算机而感到焦虑且不断去刷相关牛客和抖音,常因为算法和技术问题而感到力不从心怀疑自己到底适不适合这一行,常在开发中感觉到自己的能力不足而无法使用未学到技术的失败感,也因为公司业务安排和人员问题而导致只能自己开发一个模块且无人指导自己学习的窘迫感。在意识到自己需要改变后,毅然决然决定,要自己做出一款软件,自己创业,遂独自从零开发,捡起以前自己的知识点,以及自己的想法和精力,全力的去推进项目进度,在上班空闲期间和晚上下班时间,都在研究系统的架构,研究设计的方向,以及学习开发的知识点和实践。在时间线是4月份,逐步深入了解现在的项目以及学习学到的东西,不断完善和不断加强项目的骨架和技术点,甚至购买阿里云服务器,仅仅是为了测试web端的性能和学习部署从而让自己不断去了解各种各样的商场平台,捡起以前学习cremb商城系统残留的笔记和知识点,下定决心要在9月份之前做出一个微服务的二手闲置商城平台用于创业。于5月份20日因为转正薪资没有谈拢而毅然辞职,在实习期间和离职的这段时间自己心思全然扑入项目的开发和实践中,不断学习和去探索业务,真正的去做了深入的调研和了解,去使用技术实现业务,去把自己的想法一一实现,并且在此期间认为自己学到了很多,并且迷失了自己。有时候常常是自己一个脑热的决定,而不去想着可行度和效果,以及中间可能会遇到的困难和障碍,导致自己时常陷入一种难以言说的泥潭中,我感觉自己离最初的初心走远了,我把自己封闭在自己的舒适圈里,认为自己在创业所以可以不去管实习,甚至我抗拒外界的一切因素,因为我反而害怕,害怕自己其实做这个东西的价值被别人否定,害怕被别人看出来自己其实是在逃避,是在停滞不前的yy。想着可以把自己的退路封死,甚至不顾一切的想着为了创业而创业,从而失去了自己最开始想要是什么,然后今晚我开始审视,开始和朋友真的交心谈谈聊聊,幡然醒悟其实无论是实习工作也好,创业也好,这两件事其实不应该将其放在对立面的,我做出来的项目,需要耗费的只是我前期的开发成本,对于后期的上线和维护,仅仅只是一种少而又少的时间,在开发完毕后的上线的那两个星期,撞上了我们老生开学和新生开学,其实我们无论是怎么做都好,最重要的也就是前面那两周的宣传了,成就是成了,没成也就没成,他的利益和局限性就在那,它始终是一个校园的二手平台,它产生的利益始终是校园经济,我无法确保且不能肯定他在初始阶段就能一炮而红并且赚到第一桶金,对于二手平台而言,最需要的就是时间的沉淀,它始终无法像卖电话卡卖消费服务产生的瞬时利益大,且也不可能去取代和替代闲鱼成为主流的二手交易平台,它和闲鱼的大而全不一样,它只能局限于少而精这一品种,也就说明了它并不需要很高深的性能提升和复杂的技术实现,它的唯一优势就是通过商品的精确推荐和搜索从而加快商品的流转性。但是校内的商品就这么多,在精确和准确的算法实现和推荐都需要庞大的数据商品和人员流动,所有的yy和幻想都是不切实际且毫无意义的。最应该做的就是交给时间,而不是孤注一掷像个赌徒一样all in这个创业项目,我时常会往好的地方想,并且十分理想化的想当然,不是的,现实不会因为你是一名大学生和创业者而对你有所帮助,它只会不断向你陈述事实直到你接受他,并且放弃自己的幻想从而考虑更贴合实际的事物,我们不能因为自己的某个想法而不顾一切的all in押注,而是应该真正的从现实的角度,从自己真正冷静的思考中得到启发。于我而言,这又何尝不是一种进步。话说到这里大家可能都听不懂我在说什么,感觉叽里咕噜的说了一大堆废话,哈哈哈哈,并不是的,我只是在感慨自己的思想变化无常,从很想找实习到很想创业到现在的心静通达,何尝不是一种自我救赎呢,后面的日子我也不会放弃继续开发项目的,只是我不会太想当然和不顾一切的为了创业而创业了,而是理性的思考,并且在期间不断学习和成长,也不会抗拒找实习和工作了,而是想让自己明白,路就在脚下,无端的迷茫和焦虑是一道泥坑,它会营造出一种你在前进却不断下陷的过程,我也更希望大家能够明确自己的内心,相信自己,而不是去比对和幻想别人的生活以及自己没走的另一条路,而是大大方方的,承认自己的不足并且坚定不移的朝着更好的自己出发,共勉之
如果实习可以转正,你会不...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务