在HarmonyOS NEXT开发中如何设置popup 只在当前页面展示?

在HarmonyOS NEXT开发中如何设置popup 只在当前页面展示?正在使用popup 作为一个收到通知一个弹层提示,A页面 show出popup, A页已经跳转到B页面了,在显示 popup时,popup会出现在B页面上,是否可以设置仅在A页面展示

阅读 662
1 个回答

popup目前行为确实如此应用可以使用CustomDialog来实现,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides...
示例demo:

import router from '@ohos.router'; 
 
@CustomDialog 
export default struct UserPrivacyDialog { 
  controller: CustomDialogController = new CustomDialogController({ builder: '' }); 
  cancel: Function = () => { 
  }; 
  confirm: Function = () => { 
  }; 
  visible: Visibility = Visibility.None 
 
  build() { 
    Column() { 
      Text('我是弹窗') 
 
      Button('jump') 
        .onClick(() => { 
          router.pushUrl({ 
            url: 'pages/Second' 
          }) 
        }).backgroundColor(0xffffff).fontColor(Color.Red) 
    } 
    .margin({ top: 22 }) 
    .justifyContent(FlexAlign.SpaceEvenly) 
  } 
} 
 
@Entry 
@Component 
struct Index { 
  @State textValue: string = 'Hello World' 
  @State visible: Visibility = Visibility.None 
 
  build() { 
    Stack() { 
      Row() { 
        Column() { 
          Button('click') 
            .onClick(() => { 
              if (this.visible == Visibility.Visible) { 
                this.visible = Visibility.None 
              } else { 
                this.visible = Visibility.Visible 
              } 
            }) 
            .backgroundColor(0x777474) 
            .fontColor(0x000000) 
        } 
        .width('100%') 
      } 
      .height('100%') 
      .backgroundColor(0x885555) 
 
      Text('') 
        .onClick(() => { 
          if (this.visible == Visibility.Visible) { 
            this.visible = Visibility.None 
          } else { 
            this.visible = Visibility.Visible 
          } 
        }) 
        .width('100%') 
        .height('100%')// 透明度可以自己调节一下 
        .opacity(0.16) 
        .backgroundColor(0x000000) 
        .visibility(this.visible) 
 
      Column() { 
        GridRow({ 
          columns: { xs: 1, sm: 4, md: 8, lg: 12 }, 
          breakpoints: { 
            value: ["400vp", "600vp", "800vp"], 
            reference: BreakpointsReference.WindowSize 
          }, 
        }) { 
          GridCol({ 
            span: { xs: 1, sm: 2, md: 4, lg: 8 }, 
            offset: { xs: 0, sm: 1, md: 2, lg: 2 } 
          }) { 
            Column() { 
              Flex({ justifyContent: FlexAlign.SpaceAround }) { 
                UserPrivacyDialog(); 
              }.margin({ bottom: 10 }) 
            } 
            .backgroundColor(0xffffff) 
            .visibility(this.visible) 
            .clip(true) 
            .borderRadius(20) 
          } 
        } 
      }.width('95%') //设置弹窗宽度 
    } 
  } 
}

componentUtils.getRectangleById参考:https://developer.huawei.com/consumer/cn/doc/harmonyos-refere...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进