Cómo deshabilitar el desplazamiento horizontal en la vista web de Android

Quiero tener sólo desplazamiento vertical en mi webview y no quiero ningún desplazamiento horizontal.

webSettings.setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);

Esto me ayudó a resolver el problema de desplazamiento.

Pero usar esto hizo que mi webview parecía extraño. Altura de todo el texto de edición apretado (verticalmente) y se ve mal.

  • ¿Hay alguna otra manera que puedo deshabilitar desplazamiento horizontal desde el lado del cliente?

  • Utilizando SINGLE_COLUMN ¿cómo podemos evitar el problema con los cambios de altura de la vista web? Quiero que la apariencia vertical sea lo mismo que lo que solía ser sin SINGLE_COLUMN

Este es un hack, pero uno que ha funcionado para mí con éxito en el pasado. Envuelva su WebView en un ScrollView orientado verticalmente:

 <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> 

y luego deshabilitar todo el desplazamiento en su WebView.

Para deshabilitar el desplazamiento de WebView, puede utilizar este código:

  // disable scroll on touch webview.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { return (event.getAction() == MotionEvent.ACTION_MOVE); } }); 

Aquí es cómo inhabilito el desplazamiento horizontal solamente para un 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; } }); 

Básicamente interceptar el evento táctil y no permiten que el valor de x para cambiar. Esto permite que la vista web se desplace verticalmente pero no horizontalmente. Hazlo por y si quieres lo contrario.

Acabo de probar esto y funcionó como un encanto, no sabía que es tan simple, sólo una línea:

 mWebView.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN); 

Fuente: http://sharecoding.wordpress.com/2012/02/16/programmatically-disable-scroll-function-on-android-webview/

Siguiendo la respuesta vee , aquí está una clase WebView sólo vertical. Puede utilizarlo como un elemento de vista dentro de xml para mantener su código más limpio.

 package com.yourpackage.views; import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; import android.webkit.WebView; /** * custom {@link WebView} which only scrolls vertically but not horizontally */ public class VerticalScrollWebview extends WebView implements View.OnTouchListener { // the initial touch points x coordinate private float touchDownX; public VerticalScrollWebview(Context context) { super(context); // make vertically scrollable only makeVerticalScrollOnly(); } public VerticalScrollWebview(Context context, AttributeSet attrs) { super(context, attrs); // make vertically scrollable only makeVerticalScrollOnly(); } public VerticalScrollWebview(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // make vertically scrollable only makeVerticalScrollOnly(); } /** * make this {@link WebView} vertically scroll only */ private void makeVerticalScrollOnly() { // set onTouchListener for vertical scroll only setOnTouchListener(this); // hide horizontal scroll bar setHorizontalScrollBarEnabled(false); } @Override public boolean onTouch(View view, MotionEvent motionEvent) { // multitouch is ignored if (motionEvent.getPointerCount() > 1) { return true; } // handle x coordinate on single touch events switch (motionEvent.getAction()) { // save the x coordinate on touch down case MotionEvent.ACTION_DOWN: touchDownX = motionEvent.getX(); break; // reset the x coordinate on each other touch action, so it doesn't move case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: motionEvent.setLocation(touchDownX, motionEvent.getY()); break; } // let the super view handle the update return false; } } 
  • WebView.draw () no funciona correctamente en la última versión de WebView de Android System
  • Cookies de Android para la dirección IP
  • Cómo tratar un objeto JSON grande en Android
  • Android: WebView no puede mostrar el signo de porcentaje '%'
  • Manejar url desde la vista web onCreateWindow
  • Tratando de conectar la aplicación de Android a .NET ".svc" webservice y el servidor responde Tipo de soporte no compatible
  • ¿Por qué utilizar sqlite Database en Android?
  • Conexión de cliente a servidor en aplicaciones de chat como Viber o Telegram
  • Eventos de desplazamiento de HTML en un WebView de Android que está dentro de un ScrollView
  • Imágenes borrosas en el navegador Android de stock
  • Android addJavascriptInterface equivalente en iOS
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.