当前位置: 首页 > ds >正文

OpenHarmony 5.0设置应用设置手势导航开关打开后重新关闭导航栏和设置界面重合

目录

1.背景

2.解决方案


1.背景

在OpenHarmony 5.0中从设置界面打开手势导航开关然后重新关闭,此时设置界面导航栏和设置列表主界面重合,导致设置界面无法点击最下面的关于设备

2.解决方案

首先参考之前的如何设置导航栏文档,我们可以自己再重新设置下导航栏样式及是否显示,然后在设置是否开始手势导航有一个

settings.display.navigationbar_status

属性,我们根据这个属性强制显示和隐藏导航栏

最终的patch如下:

@@ -22,8 +22,14 @@ import AbilityConstant from '@ohos.app.ability.AbilityConstant';import window from '@ohos.window';import router from '@ohos.router';import { UIContext } from '@ohos.arkui.UIContext';
+import { BusinessError } from '@ohos.base';
+import settings from '@ohos.settings';
+export default class MainAbility extends Ability {private funcAbilityWant;
+  private windowStage:window.WindowStage;
+  private isBackground = false
+onCreate(want, launchParam) {AppStorage.SetOrCreate('newWant', want);@@ -39,10 +45,61 @@ export default class MainAbility extends Ability {}onNewWant(want: Want, launchParam: AbilityConstant.LaunchParam) {AppStorage.SetOrCreate('newWant', want);
-
+    this.setNavigationBarStatus();
+    setTimeout(()=>{
+      this.setNavigationBarStatus();
+    },500);this.toDetailPageFormUrl(want)}+  private setNavigationBarStatus() {
+    if (this.isBackground) {
+      return
+    }
+    const initValue = settings.getValueSync(this.context, 'settings.display.navigationbar_status', '1');
+    const navigationBarStatusValue = initValue === '0' ? false : true;
+    LogUtil.error("navigationBarStatusValue"+navigationBarStatusValue);
+    if (this.windowStage) {
+      let windowClass: window.Window | undefined = undefined;
+      this.windowStage.getMainWindow((err: BusinessError, data) => {
+        const errCode: number = err.code;
+        if (errCode) {
+          console.error(`Failed to obtain the main window. Cause code: ${err.code}, message: ${err.message}`);
+          return;
+        }
+
+        // 2.实现沉浸式效果:设置导航栏、状态栏显示。
+        // let names = ['status', 'navigation'];
+        // 2.实现沉浸式效果:设置导航栏、状态栏不显示。
+        let names: Array<'status' | 'navigation'>  = ['status'];
+        if (navigationBarStatusValue) {
+          names = ['status', 'navigation'];
+        }
+
+        windowClass = data;
+        windowClass.setWindowSystemBarEnable(names);
+        let SystemBarProperties: window.SystemBarProperties = {
+          //状态栏和导航栏背景颜色
+          statusBarColor: '#ffffff',
+          navigationBarColor: '#ffffff',
+          //以下两个属性从API Version8开始支持,状态栏和导航栏内容颜色
+          statusBarContentColor: '#000000',
+          navigationBarContentColor: '#000000'
+        };
+        try {
+          let promise = windowClass.setWindowSystemBarProperties(SystemBarProperties);
+          promise.then(() => {
+            console.info('Succeeded in setting the system bar properties.');
+          }).catch((err: BusinessError) => {
+            console.error(`Failed to set the system bar properties. Cause code: ${err.code}, message: ${err.message}`);
+          });
+        } catch (exception) {
+          console.error(`Failed to set the system bar properties. Cause code: ${exception.code}, message: ${exception.message}`);
+        }
+      });
+    }
+  }
+toDetailPageFormUrl(want) {window.getLastWindow(this.context).then((window: window.Window) => {let UIContext: UIContext = window.getUIContext();
@@ -54,6 +111,7 @@ export default class MainAbility extends Ability {}, router.RouterMode.Single)})}
+onWindowStageCreate(windowStage) {// Main window is created, set main page for this abilityLogUtil.log("[Main] MainAbility onWindowStageCreate")
@@ -76,6 +134,8 @@ export default class MainAbility extends Ability {GlobalContext.getContext().setObject(GlobalContext.globalKeySettingsAbilityContext, this.context);let want = GlobalContext.getContext().getObject(GlobalContext.globalKeyAbilityWant) as Wantthis.toDetailPageFormUrl(want)
+    this.windowStage = windowStage
+}onWindowStageDestroy() {
@@ -86,10 +146,12 @@ export default class MainAbility extends Ability {onForeground() {// Ability has brought to foregroundLogUtil.log("[Main] MainAbility onForeground")
+    this.isBackground = false}onBackground() {// Ability has back to backgroundLogUtil.log("[Main] MainAbility onBackground")
+    this.isBackground = true}};

http://www.xdnf.cn/news/7667.html

相关文章:

  • onlyoffice 源码 调试说明 -ARM和x86双模式安装支持
  • [Harmony]获取设备参数
  • SpringBoot 商城系统高并发引起的库存超卖库存问题 乐观锁 悲观锁 抢购 商品秒杀 高并发
  • 机械安全标准示例说明
  • 机器学习算法-聚类K-Means
  • 园区无人机智能巡检项目方案
  • 机器学习自然语言处理
  • SAP ECC即将停止支持,CIO如何应对S/4HANA的迁移挑战?
  • 【机器学习】logistic回归
  • Java 02入门,封装继承多态
  • 随记1-LLM多轮对话的陷阱
  • 操作系统学习笔记第5章 (竟成)
  • [解决方案] Word转PDF
  • Android SharedPreferences:从零到一的全面解析与实战指南
  • win10使用nginx做简单负载均衡测试
  • 省赛备考~全国青少年信息素养大赛-图形化编程复赛/省赛-模拟题-判断质数合数
  • JavaScript 数组方法详解:全面指南
  • 如何优化前端应用中的JavaScript执行效率?
  • 【LinkedList demo 内部类讲说】
  • BI是什么意思?一文讲清BI的概念与应用!
  • LeetCode-前缀和-和为K的子数组
  • 网络学习中通信方面的相关知识、及再次解读B=2W
  • 如果电路教材这么讲--积分运算电路中反馈电容并联电阻的作用
  • 制造业或跨境电商相关行业三种模式:OEM、ODM、OBM
  • 十大排序算法--快速排序
  • VitePress 中以中文字符结尾的字体加粗 Markdown 格式无法解析
  • 颠覆传统:PROFINET转EthernetIP在油墨生产线的成功应用
  • 小土堆pytorch--神经网路-卷积层池化层
  • 时尚外观+专业性能丨特伦斯V30Pro重新定义便携电子钢琴
  • 深入剖析Zynq AMP模式下CPU1中断响应机制:从原理到创新实践