HarmonyOS 自定义dialog如何设置全屏(覆盖导航栏和状态栏)

如下截图所示,使用@CustomDialog自定义dialog,如何设置全屏显示

HarmonyOS 自定义dialog如何设置全屏(覆盖导航栏和状态栏) -鸿蒙开发者社区

HarmonyOS 自定义dialog如何设置全屏(覆盖导航栏和状态栏) -鸿蒙开发者社区

HarmonyOS
17h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
aquaa

全局弹窗示例代码:

1.全局开启沉浸式模式

let windowClass: window.Window = windowStage.getMainWindowSync(); // 获取应用主窗口
let isLayoutFullScreen = true;
try {
  let promise = windowClass.setWindowLayoutFullScreen(isLayoutFullScreen);
  promise.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));
  });
} catch (exception) {
  console.error('Failed to set the window layout to full-screen mode. Cause:' + JSON.stringify(exception));
}

2.自定义弹窗

@CustomDialog
export struct CustomerDialog {
  controller: CustomDialogController
  build() {
    Column() {
      Text("提示")
      Row() {
        Button('取消', {
          type: ButtonType.Normal
        })
          .width(100)
          .height(30)
          .attributeModifier(new TextBodyModifier())
          .onClick(() => {
          })
          .fontColor(0x666666)
          .borderRadius({
            bottomLeft: 8,
            bottomRight: 8
          })
        Button('确定', {
          type: ButtonType.Normal
        })
          .width(100)
          .height(30)
          .attributeModifier(new TextBodyModifier())
          .onClick(() => {

        })
        .fontColor(0x333333)
          .borderRadius({
            bottomLeft: 8,
            bottomRight: 8
          })
      }.justifyContent(FlexAlign.SpaceAround)
    }
    .width(280)
    .height(280)
    .borderRadius(8)
    .backgroundColor(Color.White)
    .alignItems(HorizontalAlign.Center)
    .justifyContent(FlexAlign.SpaceEvenly)

  }
}

3.调用

private controller: CustomDialogController = new CustomDialogController({
  builder: CustomerDialog({
  }),
  alignment: DialogAlignment.Center,
  autoCancel: false,
  customStyle: true,
  cancel: () => {
    router.back()
  }

自定义弹窗大小有两种方式

方式一:采用弹窗容器默认样式。在默认样式中,弹窗容器高度自适应子节点,最大可为窗口高度的90%;弹窗容器的宽度根据栅格系统自适应,不跟随子节点变化。

方式二:当显示设置customStyle为true时,弹窗宽高跟随子节点内容适应。自定义dialog无法覆盖全屏覆盖底部短横条可通过该方式解决。

maskRect属性 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。

默认值:

{ x: 0, y: 0, width: '100%', height: '100%' }

showInSubWindow为true时,maskRect不生效

具体请参考:

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-methods-custom-dialog-box-V5

分享
微博
QQ
微信
回复
16h前
相关问题
Dialog如何覆盖状态栏全屏显示
10435浏览 • 1回复 待解决
如何设置状态栏导航的颜色
2992浏览 • 1回复 待解决
如何获取状态栏导航高度
2926浏览 • 1回复 待解决
鸿蒙如何获取导航状态栏高度
11442浏览 • 1回复 待解决
如何获取系统导航状态栏的高度
845浏览 • 1回复 待解决
如何获取状态栏导航高度?
260浏览 • 0回复 待解决
获取状态栏导航高度
671浏览 • 1回复 待解决
HarmonyOS 如何设置状态栏颜色?
27浏览 • 1回复 待解决
如何设置沉浸式状态栏
2626浏览 • 1回复 待解决
HarmonyOS 状态栏怎么设置颜色
77浏览 • 1回复 待解决
HarmonyOS 动态设置状态栏颜色
35浏览 • 1回复 待解决
HarmonyOS 状态栏图标颜色设置
28浏览 • 1回复 待解决
Tabs组件自定义导航UI问题
842浏览 • 1回复 待解决