【问题标题】:Android - undesired WebView movement on drag gestureAndroid - 拖动手势时不希望出现的 WebView 移动
【发布时间】:2013-01-04 14:03:16
【问题描述】:

希望有人能帮我解决这个问题:

我有两个主要层的 FrameLayout。 视频层,广播流的地方 最重要的是,有一个 WebView,它加载 一个带有小部件的门户(HTML5/CSS/...),所以它看起来像 电视上的 OSD。

当用户触摸屏幕时,会显示节目信息、节目频道图标等。 再次触摸,OSD 消失。 用户可以在两个方向(无限循环)的通道之间滑动。 所有这些手势都是在 WebView 中执行的,所以它们不是由 Android 处理的。 门户和 Android 之间的通信是通过 Javascript 接口完成的(在我的 Web 视图层上启用)。

到目前为止,一切都很好。

当小部件隐藏时,它们实际上并没有隐藏,它们只是显示在我的平板电脑屏幕上,因为门户区域大于我的网络视图区域。我正在使用 match_parent 参数作为高度和宽度。

实际的问题是,有时当我用手指拖动时,我设法滚动 Web 视图(移动它),然后我看到了门户区域的其余部分,即所谓的隐藏小部件。

我想知道如何防止这种情况发生。我无法禁用 Web 视图的手势,我只想将其固定在左上角而不做任何移动。

我希望有人能够帮助我。非常感谢。马丁

【问题讨论】:

    标签: android android-webview


    【解决方案1】:

    添加一个什么都不做的监听器。

    webView.setOnTouchListener(new View.OnTouchListener() {
    
        public boolean onTouch(View v, MotionEvent event) {
          return (event.getAction() == MotionEvent.ACTION_MOVE);
        }
    });
    

    我想你也可以只使用

    webView.setHorizontalScrollBarEnabled(false);
    

    webView.setVerticalScrollBarEnabled(false);
    

    [编辑] 我应该补充一点,如果你只是禁用滚动条,你应该将你的 webview 包装在一个滚动视图中,这样它就不能真正滚动。

    【讨论】:

    • 您好,感谢您的回答。 1.如果我按照您的建议添加监听器,我会丢失滑动手势,因此更改频道将停止工作。我还松开了两个手指拖动手势,它显示和隐藏 EPG 小部件。只有触摸手势是可以的,所以我可以通过触摸屏幕来显示或隐藏程序信息小部件。 2.关于scrollView,究竟是什么禁用了滚动?按照您在 Activity 中的建议,我将 webView 包装到 scrollView 并禁用了两个滚动条,但我能够垂直滚动。我不认为在这里使用 scrollView 是一个好主意。
    • 当你在一个滚动视图中包装一个滚动的视图时,android 只能处理一个滚动的视图......所以它通常会禁用嵌套视图的滚动。我可以看到触摸覆盖会如何破坏您的 javascript 和其他输入,但是,是什么让您决定编写网页代码并尝试将其集成到 android 中,而不是直接将其编码到 android 中?
    • 嗨......该网页是一个用于不同客户的完整门户,我无法触及。但无论如何,问题似乎是这样的:stackoverflow.com/questions/10933207/…code.google.com/p/android/issues/detail?id=4549 基本上,整个门户区域开始移动,这似乎是标准的浏览器行为。有人已经在研究 HTML、JS 部分的解决方案,所以我会看到。
    • 好的,在 JS/HTML 方面整理出来。我认为这个问题已经解决。
    • 你是怎么用js解决的?您愿意分享您的解决方案吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多