HarmonyOS 鸿蒙Next 自定义弹窗有蒙层时如何实现滑动后面的list内容

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

HarmonyOS 鸿蒙Next 自定义弹窗有蒙层时如何实现滑动后面的list内容

【关键字】

  • 自定义弹窗 / 蒙层 / 触摸 / 响应

【问题描述】

  • 自定义弹窗有蒙层的情况下,能滑动后面的list内容吗?

【解决方案】

  • 可以设置弹窗遮蔽层区域,在遮蔽层区域内的事件不透传,在遮蔽层区域外的事件透传。
  • 可以将弹窗组件的蒙层属性isModal设为false,自定义蒙层并通过Visibility控制显隐,使用hitTestBehavior(HitTestMode.None)可以实现自身不响应触摸测试。

样例demo:

@CustomDialog
struct MyDialog {
// 显隐控制设置为不占用
@Link visible: Visibility
controller1: CustomDialogController
build() {
Row() {
Column({ space: 10 }) {
Text('自定义弹窗').fontSize(25).fontColor(Color.Blue)
Flex({ justifyContent: FlexAlign.SpaceAround }) {
Button('取消').onClick(() => {
this.controller1.close()
this.visible=Visibility.None
}).backgroundColor(0xffffff).fontColor(Color.Black)
Button('确认').onClick(() => {
this.controller1.close()
this.visible=Visibility.None
}).backgroundColor(0xffffff).fontColor(Color.Black)
}.width("100%")
}.width("100%")
}.height(100)
}
}

@Entry
@Component
struct Index {
@State visible: Visibility = Visibility.None
private arr: number[] = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
dialogController1: CustomDialogController = new CustomDialogController({
builder: MyDialog({
visible: this.visible
}), offset: {dx: 0, dy: 0},
// 是否允许点击遮障层退出
autoCancel: false,
//设置窗口无蒙层
isModal:false,
})
build() {
Column({ space: 10 }) {
Button('打开弹窗').onClick(() => {
this.dialogController1.open()
this.visible=Visibility.Visible
})
List(){
ForEach(this.arr,(item:number)=>{
ListItem(){Row(){Text('文本')}}.justifyContent(FlexAlign.Center).width('100%').backgroundColor(0xFFFFFF).height(100)
})
}.divider({strokeWidth:2,color:'#F1F3F5'}).height('90%')
Column().width('100%').height('100%').position({x:0, y:0}).zIndex(10).backgroundColor(0x33000000).visibility(this.visible).hitTestBehavior(HitTestMode.None)
}.width("100%")
}
}

更多关于HarmonyOS 鸿蒙Next 自定义弹窗有蒙层时如何实现滑动后面的list内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next 自定义弹窗有蒙层时如何实现滑动后面的list内容的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next系统中,当自定义弹窗带有蒙层并希望用户能够滑动背后的列表内容时,可以通过设置弹窗的触摸事件传递策略来实现。具体实现步骤如下:

  1. 设置弹窗的触摸事件传递:在创建弹窗时,可以通过设置相关属性,使得弹窗接收到的触摸事件在特定条件下能够传递给其下的视图。这通常涉及到弹窗的触摸事件监听和处理逻辑。

  2. 调整蒙层的触摸透明度:确保蒙层不是完全阻挡触摸事件,可以通过设置蒙层的透明度或触摸事件穿透属性,使得部分触摸事件能够穿透蒙层作用于其下的列表。

  3. 列表的滚动事件处理:确保列表视图本身能够响应滚动事件。在弹窗显示时,如果触摸事件成功传递到列表,列表应能正常响应滚动操作。

  4. 测试与优化:在实际设备或模拟器上测试弹窗与列表的交互效果,根据测试结果调整弹窗的触摸事件传递策略和蒙层的属性,以达到最佳的用户体验。

请注意,具体实现细节可能因HarmonyOS的版本和API变化而有所不同。建议参考最新的HarmonyOS开发文档和示例代码进行实现。

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

回到顶部