HarmonyOS鸿蒙Next中如何实现点击后面的Window时子Window不会失焦被覆盖,同时可以响应点击但不影响上下覆盖关系
HarmonyOS鸿蒙Next中如何实现点击后面的Window时子Window不会失焦被覆盖,同时可以响应点击但不影响上下覆盖关系
我创建的子窗口不是模态窗口,创建方式是通过WindowStage.createSubWindow
方法创建的普通Window。
目前正在做的需求是,app打开的窗口A是默认大小的充满屏幕的窗口,其中会打开窗口B,这个窗口B比较小,会遮盖大半个屏幕的样子,还露出来一部分窗口A。
问题是,我点击窗口A的按钮进行交互时,窗口A似乎获取到焦点之后自动把自己放到了最上层,这样就把窗口B遮盖住了。
我希望达到的效果是,点击窗口A中的按钮交互,窗口B不会被窗口A遮盖。
用模态窗口的话,似乎也不太合适,我理解的模态窗口就像个对话框那样,直接悬浮在最上层,阻止了后面窗口A的点击了。况且,我这边的需求是后面可能还会有窗口C,窗口D,都是局部的小窗口,希望可以通过代码动态控制窗口的上下层顺序并固定住,不跟随点击事件来切换上下层关系。就像Android中动态添加了很多View一样。
大佬们,这可以实现吗?
更多关于HarmonyOS鸿蒙Next中如何实现点击后面的Window时子Window不会失焦被覆盖,同时可以响应点击但不影响上下覆盖关系的实战教程也可以访问 https://www.itying.com/category-93-b0.html
更多关于HarmonyOS鸿蒙Next中如何实现点击后面的Window时子Window不会失焦被覆盖,同时可以响应点击但不影响上下覆盖关系的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
假如把微信聊天界面看作窗口A,你想要的效果是不是类似于把键盘输入页面看作窗口B,聊天内容部分和键盘部分的点击不互相影响?
是的,是类似这种效果。就是点击下层的界面窗口A时,上层的界面也就是窗口B依然保持在最前面,覆盖住下面的窗口A。
再具体说,我的需求中,两个窗口共同形成了一个用户界面,他们的上下层关系如果变了,那界面就变了。
之所以使用Window而不是直接使用组件内布局,是因为上层窗口会单独加载Webview,而且会动态开启更多大小不一的webview,而组件内声明Webview是静态定义的。所以我想利用Window的机制来实现需求。
在HarmonyOS鸿蒙Next中,可以通过设置子Window的focusable
属性为false
来防止其失焦被覆盖。同时,使用touchable
属性确保子Window可以响应点击事件。此外,通过调整zOrder
属性来维护上下覆盖关系,确保子Window不会被其他Window覆盖。具体实现如下:
Window window = new Window(context);
window.setFocusable(false); // 防止失焦
window.setTouchable(true); // 响应点击
window.setZOrder(ZOrder.ON_TOP); // 保持在上层
这样,子Window既能响应点击,又不会失焦或被覆盖。