HarmonyOS 如何实现底部悬浮按钮

HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Heiang

可以使用子窗口实现应用内悬浮窗,通过子窗口创建windowStage.createSubWindow(‘mySubWindow’)步骤如下:

1、在EntryAbility中获取WindowStage。

onWindowStageCreate(windowStage: window.WindowStage): void {
  // Main window is created, set main page for this ability
  hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
  windowStage.loadContent('pages/Page', (err, data) => {
  if (err.code) {
  hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
  return;
  }
// 保存窗口管理器
  AppStorage.setOrCreate("windowStage", windowStage);
  hilog.info(0x0000, 'testTag', 'Succeeded in loading the content. Data: %{public}s', JSON.stringify(data) ?? '');
  });
}

2、创建子窗口,子窗口样式由子窗口加载的页面组件样式决定。

this.windowStage.createSubWindow("mySubWindow", (err, windowClass) => {
  if (err.code > 0) {
    console.error("failed to create subWindow Cause:" + err.message)
    return;
  }
  try {
    // 设置子窗口加载页
    windowClass.setUIContent("pages/MySubWindow", () => {
      windowClass.setWindowBackgroundColor("#00000000")
    });
    // 设置子窗口左上角坐标
    windowClass.moveWindowTo(0, 200)
    // 设置子窗口大小
    windowClass.resize(vp2px(75), vp2px(75))
    // 展示子窗口
    windowClass.showWindow();
    // 设置子窗口全屏化布局不避让安全区
    windowClass.setWindowLayoutFullScreen(true);
  } catch (err) {
    console.error("failed to create subWindow Cause:" + err)
  }
})
  //同时也支持子窗口响应正常点击事件,可通过添加PanGesture触发拖动使悬浮窗的移动,根据最后手势停留位置,做动画靠屏幕左或靠右显示等
  //相关代码:
  .gesture(
    // 声明该组合手势的类型为Sequence类型
    PanGesture(this.panOption)
      .onActionStart((event: GestureEvent) => {
        console.info('Pan start');
      })// 发生拖拽时,获取到触摸点的位置,并将位置信息传递给windowPosition
      .onActionUpdate((event: GestureEvent) => {
        this.windowPosition.x += event.offsetX;
        this.windowPosition.y += event.offsetY;

        this.subWindow.moveWindowTo(this.windowPosition.x, this.windowPosition.y)
      })
      .onActionEnd((event: GestureEvent) => {
        // 贴边判断
        if (event.offsetX > 0) {
          this.windowPosition.x = display.getDefaultDisplaySync().width - this.subWindow.getWindowProperties()
            .windowRect
            .width;
        } else if (event.offsetX < 0) {
          this.windowPosition.x = 0;
        }
        this.subWindow.moveWindowTo(this.windowPosition.x, this.windowPosition.y)
        console.info('Pan end');
      })
  )
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 应用级的悬浮按钮实现
39浏览 • 1回复 待解决
音乐播放悬浮按钮如何布局?
752浏览 • 1回复 待解决
HarmonyOS 悬浮按钮拖动问题
384浏览 • 1回复 待解决
HarmonyOS APP内悬浮按钮开发方案
153浏览 • 1回复 待解决
HarmonyOS 子组件悬浮底部布局
16浏览 • 1回复 待解决
如何实现悬浮窗桌面穿透
840浏览 • 1回复 待解决
HarmonyOS 如何实现可以拖动的悬浮
38浏览 • 1回复 待解决
HarmonyOS 如何实现底部弹窗效果
114浏览 • 1回复 待解决
如何实现 app 内置全局悬浮球功能?
1986浏览 • 1回复 待解决
如何实现按钮的点击效果?
477浏览 • 2回复 待解决
鸿蒙软键盘弹出后,页面底部按钮
4154浏览 • 0回复 待解决