首页 > 其他分享 >鸿蒙 next 实现隐藏顶部 StatusBar

鸿蒙 next 实现隐藏顶部 StatusBar

时间:2024-11-10 22:08:16浏览次数:1  
标签:鸿蒙 StatusBar Utils next AppUtil cyuq height com

鸿蒙 next 实现隐藏顶部 StatusBar
在一些业务场景中需要用背景图片或者颜色去自定义顶部 StatusBar 的背景,但鸿蒙 next 中默认是不可以覆盖的,所以这里介绍实现隐藏顶部 StatusBar 的实现步骤。

1.在应用启动页中开启沉浸式布局。
开启沉浸式布局的效果就是会让你可以自定义顶部状态栏和底部的指示导航按钮,实现该功能代码如下:

static setStatusBar(sysBarProps?: window.SystemBarProperties) {
let windowClass = AppUtil.getMainWindow();
// 开启沉浸式布局
windowClass.setWindowLayoutFullScreen(true).then(() => {
windowClass.setWindowBackgroundColor('#FFFFFF');
}).catch((error: BusinessError) => {
LogUtil.error(setWindowLayoutFullScreen-异常 ~ code: ${error.code} -·- message: ${error.message});
});

if (sysBarProps) {
  windowClass.setWindowSystemBarProperties(sysBarProps).catch((error: BusinessError) => {
    LogUtil.error(`setWindowSystemBarProperties-异常 ~ code: ${error.code} -·- message: ${error.message}`);
  });
}

}

2.获取状态栏与底部导航按钮的高度
/**

  • 获取状态栏的高度,单位为vp。
  • @returns
    */
    static getStatusBarHeight(): number {
    try {
    let windowClass = AppUtil.getMainWindow();
    let avoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_SYSTEM);
    const height = avoidArea.topRect.height; // 单位 px
    return AppUtil.px2vp(height);
    } catch (err) {
    LogUtil.error(JSON.stringify(err));
    return 0;
    }
    }

/**

  • 获取底部导航条的高度,单位为vp。
  • @returns
    */
    static getNavigationIndicatorHeight(): number {
    try {
    let windowClass = AppUtil.getMainWindow();
    let avoidArea = windowClass.getWindowAvoidArea(window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR);
    const height = avoidArea.bottomRect.height; // 单位 px
    return AppUtil.px2vp(height);
    } catch (err) {
    LogUtil.error(JSON.stringify(err));
    return 0;
    }
    }

3.封装组件 StatusBar 与 NavigationIndicator
StatusBar:
import { AppUtil } from "../common/utils/AppUtil";

@Component
@Preview
export struct StatusBar {
@State statusBarHeight: number = 0;
@Prop bgColor: ResourceColor = $r('app.color.mainBgColor');

aboutToAppear(): void {
this.statusBarHeight = AppUtil.getStatusBarHeight();

}

build() {
Row() {
}
.width('100%')
.height(this.statusBarHeight)
.backgroundColor(this.bgColor)
}
}

NavigationIndicator
import { AppUtil } from "../common/utils/AppUtil";

@Component
@Preview
export struct NavigationIndicator {
@State indicatorHeight: number = 0;
@Prop bgColor: ResourceColor = $r('app.color.mainBgColor');

aboutToAppear(): void {
this.indicatorHeight = AppUtil.getNavigationIndicatorHeight();
}

build() {
Row() {
}
.width('100%')
.height(this.indicatorHeight)
.backgroundColor(this.bgColor)
}
}

  1. 将 StatusBar 放到 TopAppBar 组件中:
    import Utils from '../common/utils/Utils'
    import router from '@ohos.router'
    import { StatusBar } from './StatusBar';

@Component
@Preview
export struct TopAppBar {
@Prop title: string = ''
@Prop backImg: string = '';
@Prop customBack?: () => void;
@Prop bgColor: ResourceColor = '#FFFFFF';
@Prop mode: string = 'center'; // left center 标题文字位置
@BuilderParam rightBuilderParam?: () => void;
@BuilderParam centerBuilderParam: () => void;

build() {
Column() {
StatusBar({
bgColor: this.bgColor
})
Row() {
Row() {
Image(this.backImg || Utils.getImgPath('home/adult_page_back_black.png'))
.width(Utils.getVp(48))
.height(Utils.getVp(48))
.objectFit(ImageFit.Cover)
}
.padding({
left: 8,
right: 8,
top: 4,
bottom: 4
})
.onClick(() => {
if (this.customBack) {
this.customBack()
} else {
Utils.routeBack();
}
})

    Row() {
      if (this.title == '') {
        if (this.centerBuilderParam) {
          // 不传title就使用插槽
          this.centerBuilderParam();
        }
      } else {
        Text(this.title)
          .fontColor($r('app.color.blodTextColor'))
          .fontSize(Utils.getVp(33))
          .fontWeight(FontWeight.Bold)
          .textAlign(this.mode == 'center' ? TextAlign.Center : TextAlign.Start)
          .width('100%')
      }
    }
    .margin({
      left: this.mode == 'center' ? 0 : Utils.getVp(20),
    })
    .flexShrink(1)
    .height('100%')

    Row() {
      // 插槽
      if (this.rightBuilderParam) {
        this.rightBuilderParam();
      }
    }
    .width(Utils.getVp(48))
    .height(Utils.getVp(48))
    .justifyContent(FlexAlign.Center)
  }
  .width('100%')
  .padding({
    left: Utils.getVp(16),
    right: Utils.getVp(16),
  })
  .height(Utils.getVp(88))
  .backgroundColor(this.bgColor)
  .justifyContent(FlexAlign.SpaceBetween)
}
.width('100%')

cyuq.seemlgo.com
cyuq.shyachao.com
cyuq.dhl-d.com
cyuq.tajqzl.com
cyuq.hzsunbyte.com
cyuq.tjzxjy.com
cyuq.qrpress.com
cyuq.zhanhao118.com
cyuq.marsdrinkschina.com
cyuq.xjlqcl.com
cyuq.5000news.com
cyuq.2500trip.com
cyuq.htsyfs.com
cyuq.hmgjjd.com
cyuq.tcccpsb.com
cyuq.hfsmttp.com
cyuq.nnlianbao.com
cyuq.xinchengabc.com
cyuq.njns56.com
cyuq.gzlcjzs.com
cyuq.xinlvchuang.com
cyuq.juanbanjicj.com
cyuq.tongtaijituan.com
cyuq.lydsmp.com
cyuq.shinenergygroup.com
cyuq.jingranchimian.com
cyuq.tj-shengming.com
cyuq.njxlkhs.com
cyuq.shzljr.com
cyuq.guanlinyouxuan.com
cyuq.ynyoutu.com
cyuq.jiadalong.com
cyuq.jumeizi.com
cyuq.zhs888.com
cyuq.cnaoxin.com
cyuq.afu365.com
cyuq.tzhyex.com
cyuq.xincaiit.com
cyuq.senmaohuanbao.com
cyuq.bjqunlemuye.com
cyuq.lxtxqh.com
cyuq.yuchentimes.com
cyuq.hebeihongqi.com
cyuq.ssyhmma.com
cyuq.hyl98.com
cyuq.youhezhixuan.com
cyuq.jilinsport.com
cyuq.wychyq.com
cyuq.gdhrgk.com
cyuq.jzha101.com
cyuq.lutuohb.com
cyuq.sgxinfeng.com
cyuq.bjyongxuan.com
cyuq.jxtrfund.com
cyuq.fyjyzsgs.com
cyuq.zgygzl.com
cyuq.clwzycgp.com
cyuq.wencfcw.com
cyuq.zmuoo.com
cyuq.xphysc.com
cyuq.kalilan.com
cyuq.jiexinlong.com
cyuq.shiyongsh.com
cyuq.myjhedu.com
cyuq.xczipper.com
cyuq.yjlzk.com
cyuq.huangpihushuichan.com
cyuq.yifanyuanyang.com
cyuq.dianyunzhisheng.com
cyuq.jx-tq.com
cyuq.shenshiapp.com
cyuq.hxjweiyu.com
cyuq.gjmsxy.com
cyuq.zgmcpj.com
cyuq.tiquality.com
cyuq.toto58.com
cyuq.lhcgzj.com
cyuq.gdlddb.com
cyuq.volanswing.com
cyuq.smxbsbl.com
cyuq.hflxzsgc.com
cyuq.nxttyq.com
cyuq.jiamuli.com
cyuq.banchendb.com
cyuq.aguailuo.com
cyuq.gzhajd.com
cyuq.gzxuezhe.com
cyuq.zywl9780bq.com
cyuq.nc-lianshun.com
cyuq.sp0557.com
}
}

标签:鸿蒙,StatusBar,Utils,next,AppUtil,cyuq,height,com
From: https://www.cnblogs.com/bkbk123/p/18538636

相关文章

  • 【开源鸿蒙】OpenHarmony 5.0 轻量系统最小开发环境搭建
    本文将会介绍,如何下载源代码和工具链,让磁盘占用尽可能小的同时,还可以进行轻量系统上的OpenHarmony开发(进行源码编译构建)。最终实现了将磁盘占用从完整源码的67G减少到了15G,不到完整源码的四分之一磁盘占用!一、写在前面——为什么写本篇内容OpenHarmony5.0发布了,该版本系......
  • 鸿蒙HarmonyOS(ArkTS基础篇大合集!)
    目录ArkTS语言1.初识ArkTS语言......
  • 鸿蒙Navigation页面生命周期
    Navigation作为路由容器,其生命周期承载在NavDestination组件上,以组件事件的形式开放。其生命周期大致可分为三类,自定义组件生命周期、通用组件生命周期和自有生命周期。其中,aboutToAppear和aboutToDisappear是自定义组件的生命周期(NavDestination外层包含的自定义组件),OnAppear和......
  • 在鸿蒙NEXT中开发一个2048小游戏
    本项目是基于api12开发的2048游戏,游戏的逻辑是当用户向某个方向滑动时,将该方向相邻且相等的数字相加,同时在空白区域的随机位置生成一个随机数字。游戏中的数字越大,分数越高。  首先,游戏的界面布局分别采用两个网格组件Grid来实现,难点在于上方的菜单栏是不均等的三种尺寸的组......
  • 鸿蒙NEXT开发案例:转盘1W
    【1】引言(完整代码在最后面)在鸿蒙NEXT系统中,开发一个有趣且实用的转盘应用不仅可以提升用户体验,还能展示鸿蒙系统的强大功能。本文将详细介绍如何使用鸿蒙NEXT系统开发一个转盘应用,涵盖从组件定义到用户交互的完整过程。【2】环境准备电脑系统:windows10开发工具:DevEcoStudi......
  • 鸿蒙之List组件详解
    前言:List组件的基本用法,可以用它来展示列表,并且实现列表滚动,日常开发的时候还可以用它来实现更为复杂的效果列表是一种复杂的容器,当列表项达到一定数量,超过List容器组件大小时,可以自动提供滚动功能。它适合用于呈现同类数据类型或数据类型集,例如图片和文本。在列表中显示......
  • HarmonyOS Next加密安全的双剑合璧:Device Certificate Kit与Crypto Architecture Kit
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙HarmonyOS的安全世界里,Device......
  • 鸿蒙HarmonyOS:深入Device Certificate Kit API:从集成到实战鸿蒙HarmonyOS:深入Device C
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在鸿蒙系统的开发之旅中,DeviceCertific......
  • 鸿蒙HarmonyOS证书的安全管家:Device Certificate Kit中的证书管理模块
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙HarmonyOS的世界里,设备的安全......
  • 鸿蒙HarmonyOS证书算法库揭秘:设备认证的底层实现
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在华为鸿蒙HarmonyOS的安全体系中,证书算......