如何在 Android webview 中禁用水平滚动

新手上路,请多包涵

我只想在我的 webview 中进行垂直滚动,不希望进行任何水平滚动。

webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

这帮助我解决了滚动问题。

但是使用它使我的 webview 看起来很奇怪。所有编辑文本的高度都被挤压(垂直)并且看起来很糟糕。

  • 有没有其他方法可以从客户端禁用水平滚动?

  • 使用 SINGLE_COLUMN 我们如何避免 webview 高度变化的问题?我希望垂直外观和没有 SINGLE_COLUMN 时一样

原文由 SK. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

这是一种 hack,但过去曾成功地为我工作过。在垂直方向的 ScrollView 中围绕您的 WebView:

 <ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scrollbars="vertical"    >
  <WebView
    android:id="@+id/mywebview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" />
</ScrollView>

然后禁用 WebView 中的所有滚动。

要禁用 WebView 的滚动,您可以使用以下代码:

  // disable scroll on touch
webview.setOnTouchListener(new View.OnTouchListener() {

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

原文由 SBerg413 发布,翻译遵循 CC BY-SA 3.0 许可协议

以下是我如何仅针对 webview 禁用水平滚动。

 webView.setHorizontalScrollBarEnabled(false);
webView.setOnTouchListener(new View.OnTouchListener() {
    float m_downX;
    public boolean onTouch(View v, MotionEvent event) {

        if (event.getPointerCount() > 1) {
            //Multi touch detected
            return true;
        }

        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN: {
                // save the x
                m_downX = event.getX();
                break;
            }
            case MotionEvent.ACTION_MOVE:
            case MotionEvent.ACTION_CANCEL:
            case MotionEvent.ACTION_UP: {
                // set x so that it doesn't move
                event.setLocation(m_downX, event.getY());
                break;
            }

        }
        return false;
    }
});

基本上拦截触摸事件并且不允许更改 x 值。这允许 webview 垂直滚动但不能水平滚动。如果您想要相反的结果,请为 y 做。

原文由 vee 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题