HarmonyOS 鸿蒙Next 页面组件安全区域以及内容全屏区域伸展

发布于 1周前 作者 wuwangju 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 页面组件安全区域以及内容全屏区域伸展

在使用页面组件安全区域设置时 Scroll 组件下设置无效
代码如:
build(){
Scroll() {
Column({ space: CommonConstants.COMMON_SPACE }) {
}
} .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])
.height(CommonConstants.THOUSANDTH_1000)
}

2、以及内容全屏区域伸展在Column下使用expandSafeArea 有效 但是内容并不能全屏填充
例如 顶部的图片不能在状态栏下展示


更多关于HarmonyOS 鸿蒙Next 页面组件安全区域以及内容全屏区域伸展的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

可以参考如下步骤:

1、在EntryAbility.ets中的windowStage.loadContent方法中添加以下代码,设置全屏模式和全屏模式时导航栏、状态栏的可见模式

  let isLayoutFullScreen = true;
      let windowClass: window.Window | undefined = undefined;
      try {
        let promise = window.getLastWindow(this.context);
        promise.then((data) => {
          windowClass = data;

// 设置窗口的布局是否为沉浸式布局(true表示沉浸式布局;false表示非沉浸式布局。)
          windowClass.setWindowLayoutFullScreen(isLayoutFullScreen)
            .then(() => {
              console.info('Succeeded in setting the window layout to full-screen mode.');
            })
            .catch((err: BusinessError) => {
              console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(err));
            });


//设置窗口全屏模式时导航栏、状态栏的可见模式(需全部显示,该参数设置为['status', 'navigation'],不设置,则默认不显示)
          let names: Array<'status' | 'navigation'> = [];
          windowClass.setWindowSystemBarEnable(names, (err: BusinessError) => {
            let errCode: number = err.code;
            if (errCode) {
              console.error('Failed to set the system bar to be visible. Cause:' + JSON.stringify(err));
              return;
            }
            console.info('Succeeded in setting the system bar to be visible.');
          });
          console.info('Succeeded in obtaining the top window. Data: ' + JSON.stringify(data));
        }).catch((err: BusinessError) => {
          console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(err));
        });
      } catch (exception) {
        console.error('Failed to obtain the top window. Cause: ' + JSON.stringify(exception));
      }

2、设置外层宽高和web的宽高,分别都是100%,实现全屏区域伸展


import web_webview from '@ohos.web.webview';
import business_error from '@ohos.base';
import router from '@ohos.router';

@Entry
@Component
export default struct WebPage {
  webviewController: web_webview.WebviewController = new web_webview.WebviewController();

  // private paramValue:WebParam = {url:'',title:""}


  aboutToAppear() {
    // 配置web开启调试模式
    web_webview.WebviewController.setWebDebuggingAccess(false);
    // const params = router.getParams() as WebParam; // 获取传递过来的参数对象
    // this.paramValue = params;

  }

  build() {
    Scroll() {
      Stack() {
        Column() {
          Image($r('app.media.ic_back'))
            .height('40vp')
            .width('40vp')
        }
        .onClick(() => {
          router.back();
        })
        .alignItems(HorizontalAlign.Start)
        .justifyContent(FlexAlign.Start)
        .margin({ top: '12vp' })
        .width('100%')
        .height('100%')
        .zIndex(99)

        Web({ src: 'https://developer.huawei.com/consumer/cn/', controller: this.webviewController })
          .onLoadIntercept((event) => {
            console.log('url:' + event.data.getRequestUrl())
            console.log('isMainFrame:' + event.data.isMainFrame())
            console.log('isRedirect:' + event.data.isRedirect())
            console.log('isRequestGesture:' + event.data.isRequestGesture())
            return false
          })
          .domStorageAccess(true)
          .width('100%')
          .height('100%')
          .zIndex(1)


      }

    }
    // .alignContent(Alignment.TopStart)
    .width('100%')
    .height('100%')
    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.BOTTOM])

  }
}

参考文档:

1、‘https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-window-V13#setwindowlayoutfullscreen9’

2、'https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V13/js-apis-window-V13#setwindowsystembarenable9

更多关于HarmonyOS 鸿蒙Next 页面组件安全区域以及内容全屏区域伸展的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


2.官方文档里有说到,expandSafeArea属性延伸页面背景到状态栏和导航条区域,页面内容在安全区展示。也就是说expandSafeArea仅仅是将背景色扩展到安全区,并不支持把页面内容也扩展到安全区。建议使用Window.setWindowLayoutFullScreen()方法设置窗口全屏模式,这种方式下页面元素将能够延伸到状态栏和导航条区域。

针对HarmonyOS 鸿蒙Next 页面组件安全区域以及内容全屏区域伸展的问题,以下是一些解决方案:

安全区域是指页面的显示区域,默认不与系统设置的非安全区域如状态栏、导航栏重叠。若要使页面组件扩展到安全区域外,可使用expandSafeArea属性。该属性允许组件在不改变布局的情况下,扩展其绘制区域至安全区外。但需注意,使用expandSafeArea时,组件不能设置固定宽高尺寸(百分比除外),且若父容器是滚动容器,该属性不生效。

若要实现内容全屏区域伸展,可尝试以下方法:

  • 确保页面已设置为全屏布局,可通过调用相关API如setWindowLayoutFullScreen(true)实现。
  • 检查并调整页面组件的布局属性,确保没有设置阻碍全屏伸展的属性。
  • 使用合适的布局方式,如Flex或Grid,并正确设置justifyContentalignItems等属性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部