HarmonyOS 鸿蒙Next 请提供一个可以拖拽的悬浮窗demo

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

HarmonyOS 鸿蒙Next 请提供一个可以拖拽的悬浮窗demo 请提供一个可以拖拽的悬浮窗demo

2 回复

// Index.ets import window from ‘@ohos.window’ import common from ‘@ohos.app.ability.common’ import { BusinessError } from ‘@ohos.base’;

@Entry @Component struct Index { context = this as common.UIAbilityContext build() { Row() { Column() { Button(“创建悬浮窗”) .fontSize(50) .fontWeight(FontWeight.Bold) .onClick(() => { this.createWindow() }) }.width(‘100%’) }.height(‘100%’) } createWindow() { let windowClass: window.Window | undefined = undefined; let windowStage: window.WindowStage = AppStorage.get(“windowStage”) as window.WindowStage; try { windowStage.createSubWindow(‘floatWindow’, (err: BusinessError, data) => { const errCode: number = err.code; if (errCode) { console.error('Failed to create the subwindow. Cause: ’ + JSON.stringify(err)); return; } windowClass = data; console.info('Succeeded in creating the subwindow. Data: ’ + JSON.stringify(data)); if (!windowClass) { console.info(‘Failed to load the content. Cause: windowClass is null’); } else { // 3.悬浮窗窗口创建成功后,设置悬浮窗的位置、大小及相关属性等。 windowClass.moveWindowTo(300, 300, (err: BusinessError) => { if (err.code) { console.error(‘Failed to move the window. Cause:’ + JSON.stringify(err)); return; } console.info(‘Succeeded in moving the window.’); }); windowClass.resize(500, 500, (err: BusinessError) => { if (err.code) { console.error(‘Failed to change the window size. Cause:’ + JSON.stringify(err)); return; } console.info(‘Succeeded in changing the window size.’); }); // 4.为悬浮窗加载对应的目标页面。 windowClass.setUIContent(“pages/IR240929103453137_2”, (err: BusinessError) => { if (err.code) { console.error(‘Failed to load the content. Cause:’ + JSON.stringify(err)); return; } console.info(‘Succeeded in loading the content.’); // 4.显示悬浮窗。 if (windowClass) { windowClass.showWindow((err: BusinessError) => { if (err.code) { console.error('Failed to show the window. Cause: ’ + JSON.stringify(err)); return; } console.info(‘Succeeded in showing the window.’) }) } } }); } }); } catch (exception) { console.error('Failed to create the subwindow. Cause: ’ + JSON.stringify(exception)); } } }

更多关于HarmonyOS 鸿蒙Next 请提供一个可以拖拽的悬浮窗demo的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,实现一个可以拖拽的悬浮窗功能,通常需要利用系统提供的窗口管理能力和事件处理机制。以下是一个简化的代码示例,用于说明如何实现这一功能。请注意,由于具体实现可能会随着鸿蒙系统的版本更新而有所变化,以下代码仅供学习和参考。

首先,需要在config.json中声明悬浮窗权限:

"module": {
    "package": "com.example.dragablefloatwindow",
    "reqPermissions": [
        "ohos.permission.FLOATING_WINDOW"
    ]
}

然后,在代码中创建并显示悬浮窗,同时处理拖拽事件:

// 省略了部分导入语句和类定义

public class FloatingWindowDemo extends Ability {
    private FloatingWindow floatingWindow;

    @Override
    protected void onStart(Intent intent) {
        super.onStart(intent);
        createFloatingWindow();
    }

    private void createFloatingWindow() {
        floatingWindow = new FloatingWindow(this);
        // 设置悬浮窗内容
        floatingWindow.setContent(...);
        // 设置拖拽监听器
        floatingWindow.setTouchListener(new TouchListener() {
            @Override
            public boolean onTouch(Component component, TouchEvent event) {
                // 处理拖拽逻辑
                return true;
            }
        });
        floatingWindow.show();
    }
}

请注意,上述代码是一个高度简化的示例,仅用于展示基本思路。在实际开发中,需要完善悬浮窗的内容设置、拖拽逻辑以及错误处理等。

如果问题依旧没法解决请联系官网客服,官网地址是

回到顶部