HarmonyOS 鸿蒙Next 设置安全区域不生效
HarmonyOS 鸿蒙Next 设置安全区域不生效
build() {
Navigation() {
NavRouter() {
NavDestination() {
Text(‘page1’)
}.title(“Page 1”)
}
NavRouter() {
NavDestination() {
Text(<span class="hljs-string">'page2'</span>)
}.title(<span class="hljs-string">"Page 2"</span>)
}
NavRouter() {
NavDestination() {
Text(<span class="hljs-string">'page3'</span>)
}.title(<span class="hljs-string">"Page 3"</span>)
}
}
.title(“Navigation Title”)
.titleMode(NavigationTitleMode.Mini)
.width(‘100%’)
.height(‘100%’)
.expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
}
2 回复
可以参考下面的demo达到您想要的效果。 参考文档:
entryAbility里获取底部导航栏高度:
onWindowStageCreate(windowStage: window.WindowStage): void {
// Main window is created, set main page for this ability
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/SafeAreaDemo', (err) => {
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
let windowClass: window.Window = windowStage.getMainWindowSync();
let type = window.AvoidAreaType.TYPE_NAVIGATION_INDICATOR; // 以导航条避让为例
let avoidArea = windowClass.getWindowAvoidArea(type);
let bottomRectHeight = avoidArea.bottomRect.height; // 获取到导航条区域的高度
AppStorage.setOrCreate('bottomRectHeight', bottomRectHeight);
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
let storage = LocalStorage.getShared();
[@Entry](/user/Entry)(storage)
[@Component](/user/Component)
struct SafeAreaDemo {
[@State](/user/State) isActiveWLAN: boolean = false
[@State](/user/State) isActiveBluetooth: boolean = false
bottomRectHeight: string = AppStorage.get<number>('bottomRectHeight') + 'px';
aboutToAppear(): void {
console.log('底部导航栏高度:' + this.bottomRectHeight)
}
build() {
Navigation() {
NavRouter() {
Row() {
Row()
.width(30)
.height(30)
.borderRadius(30)
.margin({ left: 3, right: 10 })
.backgroundColor(Color.Pink)
Text(`WLAN`)
.fontSize(22)
.fontWeight(500)
.textAlign(TextAlign.Center)
}
.width('90%')
.height(60)
NavDestination() {
Flex({ direction: FlexDirection.Row }) {
Text('未找到可用WLAN').fontSize(30).padding({ left: 15 })
}
}.title("WLAN")
}
.margin({ top: 10, bottom: 10 })
.backgroundColor(this.isActiveWLAN ? '#ccc' : '#fff')
.borderRadius(20)
.mode(NavRouteMode.PUSH_WITH_RECREATE)
.onStateChange((isActivated: boolean) => {
this.isActiveWLAN = isActivated
})
NavRouter() {
Row() {
Row()
.width(30)
.height(30)
.borderRadius(30)
.margin({ left: 3, right: 10 })
.backgroundColor(Color.Pink)
Text(`蓝牙`)
.fontSize(22)
.fontWeight(500)
.textAlign(TextAlign.Center)
}
.width('90%')
.height(60)
NavDestination() {
Flex({ direction: FlexDirection.Row }) {
Text('未找到可用蓝牙').fontSize(30).padding({ left: 15 })
}
}.title("蓝牙")
}
.margin({ top: 10, bottom: 10 })
.backgroundColor(this.isActiveBluetooth ? '#ccc' : '#fff')
.borderRadius(20)
.mode(NavRouteMode.REPLACE)
.onStateChange((isActivated: boolean) => {
this.isActiveBluetooth = isActivated
})
}
.width('100%')
.title('设置')
.backgroundColor("#F2F3F5")
.titleMode(NavigationTitleMode.Free)
.mode(NavigationMode.Stack)
.margin({ 'bottom': this.bottomRectHeight })
}
}
针对HarmonyOS鸿蒙Next设置安全区域不生效的问题,以下是一些可能的解决方案:
-
检查组件设置:
- 确保组件未设置固定宽高(百分比除外),因为设置固定宽高可能导致安全区域设置不生效。
- 如果父容器是滚动容器,安全区域设置也可能不生效,此时需要调整父容器的类型或布局方式。
-
确认布局层级:
- 检查是否存在层级较高的组件阻挡了当前组件的扩展。确保当前组件在层级上没有被其他组件覆盖或其扩展被限制。
-
检查安全区域设置:
- 确认是否已正确设置窗口全屏布局或组件安全区方案,以及是否与其他安全区域设置冲突。
- 确保开发环境及API版本支持相应的安全区域设置属性。
-
动态调整布局:
- 如果静态的布局设置无法满足需求,考虑使用JavaScript逻辑动态调整布局。
如果尝试了上述解决方案后问题依旧无法解决,可能是由于系统或应用本身的bug导致。此时,您可以联系官网客服获取更具体的帮助和解决方案。官网地址是:https://www.itying.com/category-93-b0.html。