customDialog焦点透传

customDialog焦点透传

HarmonyOS
2024-05-26 12:27:13
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
mzshj

本文主要用于实现customDialog自定义弹窗的焦点透传,点击弹出来的CustomDialog的Mask区域时,将焦点传递给Dialog下面的页面。

场景描述:在A页面(A页面铺满全屏)弹出一个CustomDialog B(B里面的组件的高度为100,且在屏幕最下方。则其他区域为Mask区域,Mask区域可点击)。需求:当用户的手势焦点在Dialog的Mask区域时,不隐藏Dialog,且焦点在A页面上(即可以点击A页面上的组件)。

使用的OS能力及相关的核心API

自定义弹窗customDialog

核心代码解释

@CustomDialog 
export struct MyDialog1 { 
controller1: CustomDialogController 
title: string = '' 
​ 
build() { 
  Row() { 
    Column({ space: 10 }) { 
      Text(this.title) 
        .fontSize(25) 
        .fontColor(Color.Blue) 
      Flex({ justifyContent: FlexAlign.SpaceAround }) { 
        Button('取消') 
          .onClick(() => { 
            this.controller1.close() 
          }).backgroundColor(0xffffff).fontColor(Color.Black) 
        Button('确认') 
          .onClick(() => { 
            this.controller1.close() 
          }).backgroundColor(0xffffff).fontColor(Color.Black) 
      }.width("100%") 
    }.width("100%") 
  }.height(100) 
} 
} 
​ 
// main页面 
@Entry 
@Component 
struct Index { 
@State dialogData: string = '' 
@State colorTest: Color = Color.Blue 
dialogController1: CustomDialogController = new CustomDialogController({ 
  builder: MyDialog1({ 
    title: '弹窗1', 
  }), 
  // 弹窗容器样式是否自定义 
  customStyle: false, 
  // offset: {dx: 0, dy: 0}, 
  // 是否允许点击遮障层退出 
  autoCancel: false, 
  // 弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传 
  maskRect: ({x:0,y:667,width:'100%',height:100}), 
  // 自定义蒙层颜色 
  // maskColor: (Color.Yellow) 
}) 
​ 
confirm(data: string) { 
  this.dialogData = data 
  console.info(`recv dialog data: ${data}`) // 获取弹窗输入的信息 
} 
​ 
// 在自定义组件即将析构销毁时将dialogController置空 
aboutToDisappear() { 
  // 将dialogController置空 
  // this.dialogController1 = null 
} 
​ 
build() { 
  Row() { 
    Column({ space: 10 }) { 
      Text(`这是一个弹窗的测试`) 
        .fontSize(25).margin(20).fontColor(0x3399FF) 
      Button('点击打开弹窗') 
        .onClick(() => { 
          this.dialogController1.open() 
        }) 
      Button('点击改变颜色,不影响弹窗') 
        .onClick(() => { 
          this.colorTest = this.colorTest == Color.Blue ? Color.Yellow : Color.Blue 
        }) 
        .backgroundColor(this.colorTest) 
    }.width("100%") 
  }.height("100%").backgroundColor(Color.Pink) 
} 
}

适配的版本信息

IDE:DevEco Studio 4.0.1.601

SDK:HarmoneyOS 4.0.10.11

分享
微博
QQ
微信
回复
2024-05-27 16:11:49
相关问题
怎么onClick事件?
305浏览 • 1回复 待解决
如何实现事件,你会吗?
2110浏览 • 1回复 待解决
两个重叠的组件如何实现事件
621浏览 • 1回复 待解决
HarmonyOS @CustomDialog 调用 pushUrl
279浏览 • 1回复 待解决
HarmonyOS 关于CustomDialog使用
351浏览 • 1回复 待解决
HarmonyOS 页面反向值怎么
102浏览 • 1回复 待解决
HarmonyOS TextInput无法取消焦点
314浏览 • 1回复 待解决
HarmonyOS 焦点抢占如何实现?
212浏览 • 1回复 待解决
List组件divider颜色显示List组件颜色
297浏览 • 0回复 待解决
HarmonyOS CustomDialog中弹AlertDialog问题
360浏览 • 1回复 待解决
如何控制CustomDialog显示层级
643浏览 • 1回复 待解决
CustomDialog自定义动画
405浏览 • 1回复 待解决
HarmonyOS TextInput焦点问题
404浏览 • 1回复 待解决