使用onBackPress对子窗口进行销毁

使用子窗口创建悬浮窗或者子窗口后,除了关闭按钮还希望使用系统能力对新创建的窗口进行销毁处理。

使用场景:视频小窗播放,红包雨场景。

HarmonyOS
2024-05-26 14:08:00
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
milchcow

使用的核心API

自定义组件的生命周期

ohos.window - setWindowTouchable

核心代码解释

在页面中新建一个按钮创建出一个新的子窗口,在子窗口中添加一个按钮用以模拟关闭按钮。

同时使用setWindowTouchable()让子窗口获焦,onBackPress()对子窗口的手势行为进行监听。

创建子窗口:

showSubWindow() {  
  // 1.创建应用子窗口。 
  if (windowStage_ == null) { 
    console.error('Failed to create the subwindow. Cause: windowStage_ is null');} 
  else { 
    windowStage_.createSubWindow("mySubWindow", (err: BusinessError, data) => { 
      sub_windowClass = data; 
      console.info('Succeeded in creating the subwindow. Data: ' + JSON.stringify(data)); 
      // 2.子窗口创建成功后,设置子窗口的位置、大小及相关属性等。 
      sub_windowClass.moveWindowTo(300, 300); 
      sub_windowClass.resize(500, 500); 
      //可触属性可使得子窗口获焦 
      // sub_windowClass.setWindowTouchable(true) 
        // 3.为子窗口加载对应的目标页面。16        sub_windowClass.setUIContent("pages/Page"); 
      (sub_windowClass as window.Window).showWindow(); 
    }) 
  } 
}

子窗口页面监听返回动作:

import window from '@ohos.window' 
@Entry 
@Component 
struct Page { 
  @State message: string = 'Hello World' 
  onBackPress() { 
    console.log("被触发了"); 
    window.findWindow("mySubWindow").destroyWindow(); 
    return true; 
  } 
  build() { 
    Row() { 
      Column() { 
        Text(this.message) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
      } 
      .width('100%') 
    } 
    .height('100%') 
      .backgroundColor(Color.Blue) 
  } 
  }

总结:

子窗口的可触属性让子窗口获焦,否则会由主窗口直接捕获onBackPressSecnario。

分享
微博
QQ
微信
回复
2024-05-27 17:09:17
相关问题
如何理解和重写onBackPress生命周期
799浏览 • 1回复 待解决
自定义组件什么时候销毁
608浏览 • 1回复 待解决
worker不主动销毁会造成内存泄露吗
599浏览 • 0回复 待解决
使用Drawing进行2d图像绘制
427浏览 • 1回复 待解决
DevEco Studio怎么使用真机进行调试
6856浏览 • 1回复 待解决
如何设置窗口启动图片
776浏览 • 1回复 待解决
使用dialog窗口实现红包雨窗口创建
346浏览 • 1回复 待解决
如何使用命令行进行app打包
472浏览 • 1回复 待解决
如何监听窗口大小的变化
787浏览 • 1回复 待解决
电脑端窗口预关闭实现
286浏览 • 1回复 待解决
如何用WebView创建新窗口
380浏览 • 1回复 待解决