【问题标题】:WebView always brings itself to front on Mobile Devices - Possible BugWebView 总是在移动设备上出现 - 可能的错误
【发布时间】:2017-01-27 15:47:32
【问题描述】:

在我的代码中,我有一个 webview,在它上面我放置了另一个带有标签的窗格,如下所示。 尽管在 Windows 中它可以正常工作并且符合预期,但在移动平台(iOS 测试)上,WebView 总是出现在前面,而忽略了它上面的节点。我想这是一种错误,但我将不胜感激任何克服这个问题的想法,直到它被修复。提前致谢。源码可以从here下载。

【问题讨论】:

    标签: ios iphone webview gluon javafxports


    【解决方案1】:

    iOS/Android 上的 WebView 控件使用原生控件,这意味着它是 OS 原生层的一部分。例如,在 iOS 上查看 WebView implementation

    它可以添加到 JavaFX 层之前,也可以添加到 JavaFX 层之后,并且它的 z 顺序高于所有其他 JavaFX 视觉效果。

    在任何情况下,它都不会参与 JavaFX 层内的 Z 排序:对任何 JavaFX 控件/容器进行排序都不会解决这个问题,它将始终位于其中任何一个之上。

    唯一的建议是您应该尽量避免在 WebView 上添加 JavaFX 组件,同时避免将 WebView 控件放置在允许侧面弹出或对话框的视图中。

    【讨论】:

    • 我想要这个的原因是因为我在另一个项目中有一个“加载窗格”,只要用户等待页面加载或请求完成,它就会出现在所有内容的顶部。一些用户没有意识到他们通过 webview 提交了一些东西,导致“加载窗格”没有出现。其他一些人认为它只是挂在那里。这是个问题:)
    • 确实如此,但您需要找到不同的方法,也许使用进度指示器。检查AppBar,它包含在加载 Web 视图时显示进度指示的 API(从 4.2.0 开始)。
    • 有没有办法在 webview 中加载进度指示器?
    • 仅当您将其加载为 html 内容时
    • 可能我会这样做,因为我希望在等待时与其余应用程序保持一致。谢谢何塞
    【解决方案2】:

    由于 JavaFX WebView 不参与 Z 排序并且总是出现在所有其他人之上(请参阅 Jose Pereda 答案),作为临时解决方案,我决定隐藏 WebView 并显示我的“加载窗格”每当在 WebView 中进行加载时。

    这是我如何在代码中实现它的示例:

    public class WebViewController {
    
       @FXML
       protected WebView webView;
    
       @FXML
       private void initialize() {
           WebEngine webEngine = webView.getEngine();
           webEngine.getLoadWorker().stateProperty().addListener((ov, oldState, newState) -> {
    
                webView.setVisible(newState == State.SUCCEEDED);
                loadingPane.setVisible(newState == State.RUNNING);
    
            });
       } // initaliaze()
    } // class WebViewController
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 2013-08-05
      • 2017-02-26
      • 2016-07-14
      • 1970-01-01
      • 2011-12-28
      • 1970-01-01
      相关资源
      最近更新 更多