#鸿蒙通关秘籍#如何在鸿蒙系统上实现应用内全局悬浮窗

HarmonyOS
2024-12-05 15:47:28
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
RAM枫叶舞

要在鸿蒙系统上实现应用内全局悬浮窗,可以通过创建应用子窗口实现。这涉及到从窗口管理器 WindowStage 获取窗口,并在 EntryAbility.onWindowStageCreate() 回调中进行初始化,然后创建子窗口。具体步骤如下:

  1. 初始化 FloatManager

    FloatManager.init(windowStage)
    
    init(windowStage: window.WindowStage) {
      this.windowStage_ = windowStage
    }
    
  2. 创建子窗口:

    // 创建子窗口
    showSubWindow() {
        if (this.windowStage_ == null) {
            Log.error(TAG, 'Failed to create the subwindow. Cause: windowStage_ is null');
        } else {
            this.windowStage_.createSubWindow("HarmonyWorld", (err: BusinessError, data) => {
                ... // 子窗口设置相关代码
                this.sub_windowClass.setUIContent("pages/float/FloatPage", (err: BusinessError) => {
                    ...
                    data.setWindowBackgroundColor("#00000000");
                });
            });
        }
    }
    
  3. 完善手势拖动和点击事件,通过 GestureGroup 设置互斥识别,实现悬浮窗的拖动和点击监听:

    .gesture(
      GestureGroup(GestureMode.Exclusive,
        PanGesture()
          .onActionUpdate((event: GestureEvent | undefined) => {
            if (event) {
              FloatManager.updateLocation(event.offsetX, event.offsetY);
            }
          }),
        TapGesture({ count: 1 })
          .onAction(() => {
             router.pushUrl(...);
          })
      )
    )
    
分享
微博
QQ
微信
回复
2024-12-05 17:34:31
相关问题
基于子窗口实现应用悬浮
835浏览 • 1回复 待解决
HarmonyOS 如何支持全局悬浮
362浏览 • 1回复 待解决
HarmonyOS 如何在PaasSDK内部实现悬浮
110浏览 • 1回复 待解决