HarmonyOS 鸿蒙Next如何设置应用内悬浮窗,通过创建子窗口方式,但子窗口加载的页面都是空白

HarmonyOS 鸿蒙Next如何设置应用内悬浮窗,通过创建子窗口方式,但子窗口加载的页面都是空白

通过windowStage.createSubWindow的方式创建子窗口,然后通过windowClass.setUIContent或者windowClass.loadContentByName加载页面,都是只能显示空白。请问是否有完整的demo来实现应用内悬浮窗的功能

3 回复

看下此demo是否满足:

//FloatWindow.ets
// 引入window类
import window from '[@ohos](/user/ohos).window';
import { BusinessError } from '[@ohos](/user/ohos).base';
import router from '[@ohos](/user/ohos).router';

[@Entry](/user/Entry)
[@Component](/user/Component)
struct FloatWindow {
 // 定义windowClass变量,用来接收创建的悬浮窗
 // 自定义创建悬浮窗方法
 createFloatWindow() {
   // 窗口类型设置为window.WindowType.TYPE_FLOAT
   let windowStage = AppStorage.get("windowStage") as window.WindowStage;

   // let config:window.Configuration = {name: "floatWindow", windowType: window.WindowType.TYPE_FLOAT, ctx: getContext(this)};
   // 创建悬浮窗
   windowStage.createSubWindow("floatWindow", (err, win) => {

     if (err.code) {
       console.error('Failed to create the floatWindow. Cause: ' + JSON.stringify(err));
       return;
     }
     console.info('Succeeded in creating the floatWindow. Data: ' + JSON.stringify(win));

     // 设置悬浮窗位置
     win.moveWindowTo(300, 300, (err) => {
       if (err.code) {
         console.error('Failed to move the window. Cause:' + JSON.stringify(err));
         return;
       }
       console.info('Succeeded in moving the window.');
     });
     // 设置悬浮窗大小
     win.resize(700, 200, (err) => {
       if (err.code) {
         console.error('Failed to change the window size. Cause:' + JSON.stringify(err));
         return;
       }
       console.info('Succeeded in changing the window size.');
     });
     // 为悬浮窗加载页面内容,这里可以设置在main_pages.json中配置的页面
     win.setUIContent("pages/FloatContent", (err: BusinessError) => {
       if (err.code) {
         console.error('Failed to load the content. Cause:' + JSON.stringify(err));
         return;
       }
       win.setWindowBackgroundColor("#00000000")
       console.info('Succeeded in loading the content.');
       // 显示悬浮窗。
       win.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.');
       });
     });
   });
 }
}

更多关于HarmonyOS 鸿蒙Next如何设置应用内悬浮窗,通过创建子窗口方式,但子窗口加载的页面都是空白的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


上代码,可能是你设置啥的有问题

针对HarmonyOS鸿蒙Next设置应用内悬浮窗,并通过创建子窗口方式加载页面时遇到页面空白的问题,可以尝试以下解决方案:

  1. 检查网络权限:若加载的是在线页面,需确保应用已添加网络权限ohos.permission.INTERNET,且设备处于联网状态。
  2. 确认资源访问权限:确保fileAccessimageAccessonlineImageAccess等权限已开启,以便加载相关资源。
  3. 调试HTML页面:若页面代码存在问题,可使用浏览器打开对应页面验证,或参考Devtools工具调试前端页面。
  4. 检查子窗口设置:确保子窗口创建成功后,正确设置了位置、大小及UI内容。检查setUIContent方法是否正确指向了有效的页面路径。
  5. 更新和测试:根据最新HarmonyOS开发文档,确保使用正确的API和版本。在不同设备和场景下充分测试,优化界面布局和交互逻辑。

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

回到顶部