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
学会了,多谢楼主分享
更多关于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表示悬浮球形态。
示例代码展示了完整的实现逻辑:
- 在
aboutToAppear
生命周期中初始读取状态并注册监听 - 通过
settings.getValue
异步获取导航信息 - 使用
registerKeyObserver
监听状态变化 - 解析JSON数据后根据
showType
更新界面状态
这种实现方式能够准确获取导航状态变化,适用于需要动态调整布局的场景。开发者可以根据isFloatOpen
状态变量在build方法中实现相应的UI适配逻辑。