HarmonyOS鸿蒙Next中如何判断系统悬浮三键导航是否开启

HarmonyOS鸿蒙Next中如何判断系统悬浮三键导航是否开启 问题背景:

开发某些布局场景时,需要根据三键导航的开启关闭状态进行适配调整。

解决措施:

可以通过读取公告settings字段float_navigation_info,判断系统悬浮三键导航是否开启。当字段中的showType为0时,标识三键导航开启。

可以通过监听该字段,感知悬浮三键导航的状态变化。

示例代码如下:

import { settings } from '@kit.BasicServicesKit';

class NavigationButtonInfo {
   // 显示状态:-1 不显示;0 显示为三键形态;1 显示为悬浮球形态
   showType: number = -1;
   // 三键导航所在位置区域,x坐标,y坐标,三键区域宽度,三键区域高度;单位:px
   region: number[] = [0, 0, 0, 0];
 }

 @Entry
 @Component
 struct Index {
   @State isFloatOpen: boolean = false;
   @State navigationInfo: NavigationButtonInfo | undefined = undefined;

   aboutToAppear(): void {
     this.readInfo();
     this.watchChange();
   }

   // 读取三键导航信息判断是否开启
   private readInfo(): void {
     try {
       settings.getValue(this.getUIContext().getHostContext(), 'float_navigation_info', settings.domainName.USER_PROPERTY)
         .then((data: string) => {
           if(data) {
             this.navigationInfo = JSON.parse(data) as NavigationButtonInfo;
             this.isFloatOpen = this.navigationInfo.showType === 0;
           }
         })
     } catch (e) {
       // ...
     }
   }

   // 监听三键导航信息变化
   private watchChange(): void {
     settings.registerKeyObserver(this.getUIContext().getHostContext(), 'float_navigation_info', settings.domainName.USER_PROPERTY, () => {
       this.readInfo();
     })
   }

   build() {
     Column() {
     // ... 根据三键导航是否开启进行UI适配
     }
   }
}

更多关于HarmonyOS鸿蒙Next中如何判断系统悬浮三键导航是否开启的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

学会了,多谢楼主分享

更多关于HarmonyOS鸿蒙Next中如何判断系统悬浮三键导航是否开启的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


学费了

在HarmonyOS鸿蒙Next中,可通过window模块的getSystemBarProperties方法获取系统栏属性。使用getAvoidArea接口查询安全区域,若底部安全区域高度大于0,通常表示三键导航已启用。具体实现为调用window.getSystemBarProperties()并检查返回的avoidArea对象中的bottomRect属性高度值。

在HarmonyOS Next中,通过读取系统设置字段float_navigation_info来检测悬浮三键导航状态是正确的方法。当showType值为0时,表示三键导航处于开启状态,值为-1表示关闭,值为1表示悬浮球形态。

示例代码展示了完整的实现逻辑:

  1. aboutToAppear生命周期中初始读取状态并注册监听
  2. 通过settings.getValue异步获取导航信息
  3. 使用registerKeyObserver监听状态变化
  4. 解析JSON数据后根据showType更新界面状态

这种实现方式能够准确获取导航状态变化,适用于需要动态调整布局的场景。开发者可以根据isFloatOpen状态变量在build方法中实现相应的UI适配逻辑。

回到顶部