Desplazamiento de Webview dentro de una vista de desplazamiento

Lo que tengo:
En este momento tengo una vista de desplazamiento como padre. Dentro de esta vista de desplazamiento, estoy usando un WebView que carga una URL y luego muestra texto en ella. Aquí está mi xml:

<ScrollView android:id="@+id/parentScroll" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/Heading" > <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="5dp" > <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="300dp" android:background="@drawable/webview" /> </RelativeLayout> </ScrollView> 

Lo que quiero:
Quiero desplazar webView dentro de él. Cuando toco el webView, la vista de desplazamiento principal se llama. Tengo que mantener la vista de desplazamiento de los padres también, pero además de esto quiero desplazar el contenido de WebView dentro de él cuando toco en webView.

¿Cómo puedo hacer esto?

Crear una vista personalizada de Interceptación por tacto

CustomWebview.java

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

En layout.xml

 <com.package.custom.widgets.CustomWebview android:id="@+id/view_extra" android:layout_width="match_parent" android:layout_height="wrap_content" /> 

De acuerdo con los documentos de diseño de Android, nunca debe colocar un contenedor de desplazamiento dentro de un contenedor de desplazamiento si se desplazan en la misma dirección. No está destinado a manejar tal cosa.

Yo tuve el mismo problema. Debe configurar su Altura de webView como su contenido. Para esto haga esto:
Agregue estas líneas a su método onCreate en Actividad:

 webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)"); super.onPageFinished(view, url); } }); webView.addJavascriptInterface(this, "MyApp"); 

Y añade este método a tu actividad:

 @JavascriptInterface public void resize(final float height) { MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { webView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); } }); } 

Los widgets desplazables anidados generalmente se desaconsejan. Es una experiencia de usuario confusa porque es fácil desplazar la cosa equivocada. Diga que tengo la intención de desplazar la región de desplazamiento externa, pero tocó la región interior primero y lanzó muy duro. Entonces el interior se desplazará y seré como huh? ¿Por qué no se desplazó?

Incluso si uno se desplaza horizontal y el otro es vertical, los reconocedores de gestos pueden confundir uno por otro para que obtenga el mismo efecto. Es un caso de uso válido pero sigue siendo dudoso y lo evitaría. (IE: Los seres humanos no perfectamente deslizar verticalmente y horizontalmente correctamente, es generalmente con un ángulo.)

Empujaría para cambiar el diseño para romper las áreas de desplazamiento. Idealmente 1 artículo desplazable por página. Incluso proponer uno mismo y proporcionar al diseñador de ambas experiencias y ver cuál eligen.

Para expresar cómo esto va a chupar. Mira este ejemplo. Esto no es una solución, sino sólo para mostrar la experiencia.

 <ScrollView android:id="@+id/parentScroll" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/Heading" > <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="5dp" > <TextView android:id="@+id/topText" android:layout_width="match_parent" android:layout_height="1000dp" android:text="@string/lotsoftext" /> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="300dp" android:background="@drawable/webview" /> <TextView android:id="@+id/topText" android:layout_width="match_parent" android:layout_height="1000dp" android:text="@string/lotsoftext" /> </RelativeLayout> 

  • Compruebe la conexión a Internet en Android WebView (Córdoba)
  • ¿Cómo puedo descargar el archivo mediante webview? (Este caso es raro)
  • Cómo traer el campo enfocado en la vista usando iscroll y Android WebView
  • La fuente del recurso no se carga en android webView
  • Interceptación de descarga en webview y descarga mediante HttpClient
  • Android detecta cambio de URL de webview
  • React-Native: Descarga y carga de archivos desde android webview
  • Establecer cookies de forma programática en Crosswalk WebView en Android
  • ¿Por qué mi WebView no llena el ancho completo de mi pantalla?
  • Teclado amigable de correo electrónico de Android en el campo de entrada de webview
  • Reproducción de archivos de audio locales en la aplicación de visualización web de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.