如何在安卓网页视图中禁用水平滚动

2022-09-03 03:13:58

我希望在我的 Web 视图中只有垂直滚动,并且不希望任何水平滚动。

webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

这有助于我解决滚动问题。

但是使用这个使我的网络视图看起来很奇怪。所有编辑文本的高度被挤压(垂直),并且看起来很糟糕。

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

  • 使用SINGLE_COLUMN我们如何避免Webview高度变化的问题?我希望垂直的外观和感觉与以前相同,而不会SINGLE_COLUMN


答案 1

以下是我仅为Web视图禁用水平滚动的方法。

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 值更改。这允许 Web 视图垂直滚动,但不能水平滚动。如果你想要相反的东西,请为y做。


答案 2

这是一个黑客,但过去曾成功地为我工作过。将 Web 视图包围在垂直方向的 ScrollView 中:

<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);
    }
});

推荐