HarmonyOS . 沉浸状态栏使用

1,自定义 AppBar 组件

@Component
export struct AppBar {private title: string | Resource = '';private color?: ResourceColor;@StorageProp('topRectHeight')topRectHeight:number=0@BuilderloadBuilder() {}@BuildertailingBuilder() {Shape().width(28)}@BuildertitleBuilder(){Text(this.title).fontSize(20).fontWeight(FontWeight.Bold).fontColor($r('app.color.start_window_background'))}@BuilderParam loading: () => void = this.loadBuilder;@BuilderParam tailing: () => void = this.tailingBuilder;@BuilderParam titleSlot: () => void = this.titleBuilder;build() {Stack(){Row() {this.loading()this.tailing()}.backgroundColor(this.color).width('100%').height(56 ).padding({ left: 8, right: 8, }).justifyContent(FlexAlign.SpaceBetween)this.titleSlot()}.padding({ top: px2vp(this.topRectHeight)})}}

2, 在EntryAbility中进行,窗口全屏处理,并且同时在onWindowStageCreate方法获取状态栏高度

async onWindowStageCreate(windowStage: window.WindowStage): Promise<void> {// Main window is created, set main page for this abilityhilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');windowStage.loadContent('pages/Index', (err, data) => {if (err.code) {hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');return;}hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');});let windowClass: window.Window=windowStage.getMainWindowSync()//获取应用主窗口//1,设置窗口全屏let isLayoutFullScreen=truewindowClass.setWindowLayoutFullScreen(isLayoutFullScreen).then(()=>{console.info('设置窗口布局为全屏模式')}).catch((err)=>{console.info('设置窗口布局为全屏模式失败。处理步骤导致'+JSON.stringify(err))})//2,获取布局避让遮挡的区域// 以导航条避让为例 ---api 9以上 (TYPE_NAVIGATION_INDICATOR)// let type = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR// let avoidArea=windowClass.getAvoidArea(type)// let bottomRectHeight=avoidArea.bottomRect.height; // 获取到导航条区域的高度// AppStorage.SetOrCreate('bottomRectHeight', bottomRectHeight)// 以状态栏避让为例let type=window.AvoidAreaType.TYPE_SYSTEMlet  avoidArea=await windowClass.getAvoidArea(type)let bottomRectHeight= avoidArea.topRect.heightAppStorage.SetOrCreate('topRectHeight',bottomRectHeight)//3,注册监听函数,动态获取避让区域数据windowClass.on('avoidAreaChange',(data)=>{if (data.type === window.AvoidAreaType.TYPE_SYSTEM) {let topRectHeight=data.area.topRect.heightAppStorage.SetOrCreate('topRectHeight',topRectHeight)}// else if(data.type == window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR){//   let bottomRectHeight = data.area.bottomRect.height;//   AppStorage.SetOrCreate('bottomRectHeight', bottomRectHeight);// }})}

3,在pages中的使用

import PreferencesUtils from '../dbSQL/PreferencesUtils';
import  {AppBar}  from '../pages/AppBar'
import router from '@ohos.router';@Entry
@Component
struct Index {@State message: string = '';aboutToAppear(){PreferencesUtils.putString('userName','张三')PreferencesUtils.putString('age','18')PreferencesUtils.putString('sex','男')}async getAll(){this.message=JSON.stringify(await PreferencesUtils.getAll())console.log('getAll', this.message)}@Buildertitle() {Text("Preferences的使用").fontSize('18fp').fontWeight(FontWeight.Bold).margin({ left: 12 })}@Buildertailing() {Button() {Image($r('app.media.icon')).width(26).height(26).fillColor(Color.Black)}.width(36).height(36).backgroundColor(Color.Transparent).onClick(() => this.toClick())}toClick() {router.pushUrl({url:'pages/CustomDialogView'})}@Builderloading() {Button() {Image($r('app.media.more')).width(30).height(30)}.width(36).height(36).backgroundColor(Color.Transparent)}build() {Column() {AppBar({color: Color.White,tailing: () => {this.tailing()},loading:()=>{this.loading()},titleSlot: this.title})Text(this.message).fontSize(20).margin({top:30}).fontWeight(FontWeight.Bold)Column({space:20}){Button('getAll').onClick(async ()=>{this.getAll()})Button('put').onClick(async ()=>{//插入数据key相同时,会自动修改替换value值PreferencesUtils.putString('userName','李四')PreferencesUtils.putString('age','24')PreferencesUtils.putString('sex','女')this.getAll()})Button('update').onClick(async ()=>{await PreferencesUtils.update('userName','王二麻子')await PreferencesUtils.update('age','35')await PreferencesUtils.update('sex','男')this.getAll()})Button('delete').onClick(async ()=>{await PreferencesUtils.delete('sex')this.getAll()})Button('clear').onClick(async ()=>{await PreferencesUtils.clear()this.getAll()})}.margin({top:30}).justifyContent(FlexAlign.Center)}.backgroundColor('#fafafa').width('100%')}
}

相关新闻

一文详解使用java easyexcel导出文件的几种情况

一文详解使用java easyexcel导出文件的几种情况

情况一&#xff1a;简单的导出指定类型文档&#xff0c;不要求格式 filePath-文件路径// 设置响应头response.setContentType("application/octet-stream");// 字符集处理&#xff0c;确保文件名的正确显示response.setHeader("Content-Disposition","…

2026/7/18 20:12:38 阅读更多 →
设计模式-创建型-抽象工厂模式

设计模式-创建型-抽象工厂模式

1.概念 工厂方法模式只能生产一个产品系列&#xff0c;抽象工厂可以生产多个产品系列 2.作用 多个具体产品组成一个产品族&#xff08;产品系列&#xff09;&#xff0c;一个具体工厂负责生产一个产品族 3.应用场景 系统所需产品间由依赖关系&#xff0c;可以划分为同一产…

2026/7/19 10:05:17 阅读更多 →
浅谈vue3 和 vue2的区别

浅谈vue3 和 vue2的区别

vue3中不再导出一个Vue的构造函数&#xff0c;而是具名导出很多数据不给用户提供Vue构造函数来创建vue实例&#xff0c;使用一个具名导出的createApp&#xff0c;然后传入一个根组件来创建&#xff0c;然后返回一个类似于vue实例的对象&#xff0c;调用mount方法来实现挂载组件…

2026/7/19 19:54:18 阅读更多 →
Unity AssetBundle热更新实战:从打包到加载的全链路架构与性能优化

Unity AssetBundle热更新实战:从打包到加载的全链路架构与性能优化

1. 项目概述与核心价值 在移动游戏和在线应用开发中&#xff0c;资源热更新是一个绕不开的核心需求。想象一下&#xff0c;你的游戏上线后&#xff0c;发现某个英雄的皮肤贴图有瑕疵&#xff0c;或者一个关键关卡的配置数据需要调整。如果每次修复都要用户重新下载整个几百兆甚…

2026/7/19 19:55:47 阅读更多 →
MLOps项目范围界定:从业务问题到可执行合约的六步法

MLOps项目范围界定:从业务问题到可执行合约的六步法

1. 为什么“项目范围界定”是MLOps里最被低估的生死线&#xff1f; 你有没有遇到过这样的场景&#xff1a;团队熬了三个月&#xff0c;模型在离线测试集上AUC干到了0.92&#xff0c;上线后业务方点开监控面板&#xff0c;发现点击率不升反降2%&#xff0c;运营同学发来一句&…

2026/7/19 19:55:47 阅读更多 →
AM62L EQEP与GTC寄存器配置实战:高精度运动控制与系统定时

AM62L EQEP与GTC寄存器配置实战:高精度运动控制与系统定时

1. 项目概述与核心价值 在工业自动化、机器人控制或者高精度数控机床这类对实时性和精度要求极高的嵌入式应用里&#xff0c;我们工程师常常需要和芯片最底层的硬件模块打交道。今天要聊的&#xff0c;就是德州仪器&#xff08;TI&#xff09;AM62L Sitara处理器里两个非常关键…

2026/7/19 19:55:47 阅读更多 →
Godot游戏反编译实战:使用gdsdecomp工具解析PCK与字节码

Godot游戏反编译实战:使用gdsdecomp工具解析PCK与字节码

1. 项目概述&#xff1a;为什么我们需要关注Godot游戏反编译&#xff1f; 如果你是一个独立游戏开发者&#xff0c;或者对Godot引擎的运作机制充满好奇&#xff0c;那么“反编译”这个词对你来说可能既熟悉又陌生。熟悉是因为在Unity、Unreal等引擎生态里&#xff0c;资源提取和…

2026/7/19 19:55:47 阅读更多 →
零经验转行电商运营与数据分析岗

零经验转行电商运营与数据分析岗

引言&#xff1a;当“零经验”遇上“电商运营/数据岗”“我想转行做电商运营或数据分析&#xff0c;但没有相关项目经验&#xff0c;简历一片空白&#xff0c;怎么办&#xff1f;”这是许多希望进入互联网电商领域的求职者最真实的困惑。面对招聘要求上“有相关经验者优先”的字…

2026/7/19 19:55:47 阅读更多 →
Qt框架跨平台开发核心技术解析与实践指南

Qt框架跨平台开发核心技术解析与实践指南

1. Qt框架的跨平台基因解析Qt诞生于1991年&#xff0c;最初由挪威Trolltech公司开发&#xff0c;其设计初衷是解决当时GUI开发中"一次编写&#xff0c;到处编译"的难题。经过30余年演进&#xff0c;Qt已从单纯的GUI库发展为覆盖全生命周期的跨平台开发框架。其核心价…

2026/7/19 19:53:40 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战:Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析

鸿蒙 ArkTS 实战&#xff1a;Emoji Idiom Guess 从表情成语猜谜到交互闭环完整解析 前言 Emoji Idiom Guess 是一个基于鸿蒙 ArkTS 编写的单页互动应用&#xff0c;核心围绕 表情线索、答案输入、首字母提示和收藏关卡 展开。项目没有依赖复杂服务端&#xff0c;也没有把逻辑…

2026/7/19 0:00:03 阅读更多 →
Unity与Python本地通信:基于Flask的跨语言数据交换实战

Unity与Python本地通信:基于Flask的跨语言数据交换实战

1. 项目概述&#xff1a;为什么我们需要一个本地通信服务器&#xff1f;在游戏开发、数字孪生、仿真训练等众多领域&#xff0c;Unity作为强大的实时3D内容创作平台&#xff0c;其核心逻辑通常由C#驱动。然而&#xff0c;当我们需要进行复杂的数据分析、机器学习推理、科学计算…

2026/7/19 0:00:04 阅读更多 →
科研课题设计全流程:从选题到成果落地的实战指南

科研课题设计全流程:从选题到成果落地的实战指南

1. 课题设计全流程解析&#xff1a;从选题到成果落地的实战指南课题设计是科研工作者、高校师生以及企业研发人员日常工作中的核心环节。一个优秀的课题设计不仅决定了研究的方向和质量&#xff0c;更直接影响最终成果的学术价值和应用前景。作为在科研一线摸爬滚打多年的从业者…

2026/7/19 0:00:04 阅读更多 →
ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

ai agent框架spring ai/alibaba 源码原理分析(六) agent和组件

简介 saa是java的ai agent框架&#xff0c;本系列将深入剖析 Spring AI Alibaba 的源码实现与核心原理&#xff0c;不仅可以指导agent的开发&#xff0c;更可以改造框架&#xff0c;增加新特性 系列内容&#xff1a; 系列(一) 架构 完成 系列(三) 调用 I 工具 完成 II M…

2026/7/19 0:01:20 阅读更多 →
终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南:如何用Steam-auto-crack实现Steam游戏自动破解

终极指南&#xff1a;如何用Steam-auto-crack实现Steam游戏自动破解 【免费下载链接】Steam-auto-crack Steam Game Automatic Cracker 项目地址: https://gitcode.com/gh_mirrors/st/Steam-auto-crack Steam-auto-crack是一款功能强大的Steam游戏自动破解工具&#xff…

2026/7/19 9:10:31 阅读更多 →
移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试实战:电流、功率、亮度和场景对比

移动端游戏功耗测试:先控制变量,再比较优化是否真的省电 摘要:功耗测试最容易犯的错误,是拿两次不同温度、不同亮度、不同场景的平均功率直接比较。本文给出一套可复现的游戏功耗测试方法,覆盖引擎特性验证、版本回归和黑盒体验测试,并说明如何把功耗与帧率、温控、CPU/G…

2026/7/19 19:29:48 阅读更多 →