Android WebView dentro de ScrollView solo desplaza scrollview

En mi aplicación tengo un ScrollView que contiene algunas linearviews, algunas vistas de texto y One Webview, luego otros diseños lineales, etc. El problema es que el WebView no se desplaza. El Scroll sólo escucha en ScrollView. ¿¿Alguna sugerencia??


<ScrollView > <TextView /> <WebView /> <-- this does not scroll <TextView /> </ScrollView > 

4 Solutions collect form web for “Android WebView dentro de ScrollView solo desplaza scrollview”

Aquí está la solución. Encontrado en línea. He subclasificado WebView y estoy usando el requestDisallowInterceptTouchEvent(true); Para permitir que mi webview maneje el evento de desplazamiento.

TouchyWebView.java

 package com.mypackage.common.custom.android.widgets public class TouchyWebView extends WebView { public TouchyWebView(Context context) { super(context); } public TouchyWebView(Context context, AttributeSet attrs) { super(context, attrs); } public TouchyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent event){ requestDisallowInterceptTouchEvent(true); return super.onTouchEvent(event); } } 

Y en layout.xml

 <com.mypackage.common.custom.android.widgets.TouchyWebView android:id="@+id/description_web" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

La solución proporcionada por @panos funciona pero todavía tiene problemas cuando se utiliza con ScrollView. La siguiente versión mejorada supera ese problema.

 public class TouchyWebView extends WebView { public TouchyWebView(Context context) { super(context); } public TouchyWebView(Context context, AttributeSet attrs) { super(context, attrs); } public TouchyWebView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean onTouchEvent(MotionEvent event) { //Check is required to prevent crash if (MotionEventCompat.findPointerIndex(event, 0) == -1) { return super.onTouchEvent(event); } if (event.getPointerCount() >= 2) { requestDisallowInterceptTouchEvent(true); } else { requestDisallowInterceptTouchEvent(false); } return super.onTouchEvent(event); } @Override protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) { super.onOverScrolled(scrollX, scrollY, clampedX, clampedY); requestDisallowInterceptTouchEvent(true); } } 

Además, es posible que desee tener las siguientes opciones para su TouchyWebView.

 mWebView.getSettings().setLoadWithOverviewMode(true); mWebView.getSettings().setUseWideViewPort(true); mWebView.getSettings().setSupportZoom(true); mWebView.getSettings().setBuiltInZoomControls(true); 

Panos es suficiente para mí con una excepción … Mi WebView altura fija (200dp) puede estar vacía o puede haber cargado mucho contenido. Por lo tanto, puede ser o no ser desplazable "sí mismo". La solución de Panos está consumiendo siempre MotionEvent , así que cuando WebView está vacío y el usuario toque WebView y trate de desplazarse, entonces WebView no se desplazará (porque no hay contenido) y desplazable padre también, causa WebView "traga" MotionEvent . He añadido una instrucción small if para el comportamiento esperado:

 @Override public boolean onTouchEvent(MotionEvent event) { if(computeVerticalScrollRange() > getMeasuredHeight()) requestDisallowInterceptTouchEvent(true); return super.onTouchEvent(event); } 
  • Cuando WebView está vacío y no vertical-desplazable entonces computeVerticalScrollRange() == getMeasuredHeight()
  • Cuando WebView tiene un contenido mayor que su altura (es desplazable) entonces computeVerticalScrollRange() > getMeasuredHeight()

Puede cambiar en 3 diseños:

  1. First TextView – encabezado
  2. WebView – diseño principal
  3. Second TextView – pie de página

 WebView web = (WebView) findViewById(R.id.webView); View header = getLayoutInflater().inflate(R.layout.header_layout, null); View footer = getLayoutInflater().inflate(R.layout.foorer_layout, null); web.addHeaderView(headerComment); web.addFooterView(footerComment); 
  • Desactivar ventanas emergentes y alarmboxes en la vista web de android
  • Señal 11 SIGSEGV Crash en Galaxy S3 Android WebView
  • HTC One X - Webview se convierte en blanco / vacío después del toque
  • Incluya algunas páginas en una página en JQuery móvil
  • Vista web de Android: descarga archivos como los navegadores
  • Depuración de una WebView de Android desde el PC mediante adb
  • Cómo obtener Bitmap de WebView genera un fallo de OutOfMemory
  • ¿Cómo capturar esta excepción en la vista web de Android?
  • Android: la vista web se corta
  • Cómo deshabilitar el cuadro de diálogo "Guardar contraseña" en un WebView de Android?
  • Fuente personalizada para la vista web
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.