HarmonyOS 鸿蒙Next中怎么实现类似Android的SnackBar效果,全局弹出顶层的View(可以自定义)并且不遮挡底层的UI操作交互

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

HarmonyOS 鸿蒙Next中怎么实现类似Android的SnackBar效果,全局弹出顶层的View(可以自定义)并且不遮挡底层的UI操作交互

请问鸿蒙中怎么实现类似Android的SnackBar的效果,全局弹出顶层的View(可以自定义)并且不遮挡底层的UI操作交互

2 回复

可以使用promptAction组件能力,promptAction.openCustomDialog()。同时设置promptAction.openCustomDialog({isModal: false})来取消浮窗蒙层,进行与浮窗外事件交互。参考文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-promptaction-V5#showdialogoptions

import promptAction from ‘@ohos.promptAction’

let customDialogId: number = 0

@Builder function customDialogBuilder() { Column() { Text(‘Custom dialog Message’).fontSize(10) Row() { Button(“确认”).onClick(() => { promptAction.closeCustomDialog(customDialogId) }) Blank().width(50) Button(“取消”).onClick(() => { promptAction.closeCustomDialog(customDialogId) }) } } }

@Entry @Component struct Index { @State message: string = ‘Hello World’

@Builder customDialogComponent() { customDialogBuilder() }

build() { Row() { Column() { Button(‘xxxx’).onClick(() => { console.log(‘xxx’) }) Text(this.message) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { promptAction.openCustomDialog({ builder: () => { this.customDialogComponent() }, showInSubWindow: false, offset: { dx: 5, dy: 5 }, backgroundColor: 0xd9ffffff, cornerRadius: 20, width: ‘80%’, height: 200, isModal: false, borderWidth: 1, borderStyle: BorderStyle.Dashed, //使用borderStyle属性,需要和borderWidth属性一起使用 borderColor: Color.Blue, //使用borderColor属性,需要和borderWidth属性一起使用 shadow: ({ radius: 20, color: Color.Grey, offsetX: 50, offsetY: 0 }), }).then((dialogId: number) => { customDialogId = dialogId }) }) } .width(‘100%’) } .height(‘100%’) } }

更多关于HarmonyOS 鸿蒙Next中怎么实现类似Android的SnackBar效果,全局弹出顶层的View(可以自定义)并且不遮挡底层的UI操作交互的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS 鸿蒙Next中,要实现类似Android的SnackBar效果,即全局弹出顶层的View并且不遮挡底层的UI操作交互,可以通过以下方式实现:

  1. 使用Ability和Window:

    • 创建一个新的Ability,专门用于显示全局的弹出View。
    • 使用Window类来设置这个Ability的窗口属性,确保它位于顶层且不遮挡其他UI的交互。可以通过设置窗口类型(如WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,但需注意鸿蒙的具体API可能有所不同)和标志(如FLAG_NOT_FOCUSABLEFLAG_NOT_TOUCH_MODAL)来实现。
  2. 自定义View:

    • 在这个专门的Ability中,加载自定义的View布局,这个布局就是你想要显示的弹出内容。
    • 通过布局文件和代码动态设置View的样式和行为。
  3. 控制显示和隐藏:

    • 使用Ability的生命周期或者通过AI Channel等方式与其他Ability通信,控制这个全局弹出View的显示和隐藏。

需要注意的是,鸿蒙系统的API和Android有所差异,具体实现时可能需要参考鸿蒙的官方文档和API。

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

回到顶部