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 obtener el nombre de archivo al hacer clic en URL en la vista web
- Vista web de Android con GSAP: intenta eliminar la referencia local que no sea JNI,
- Android- PhoneGap / WebView ignora las metaetiquetas de la ventana de visualización?
- WebView de Android cargando en blanco al ver listas anidadas html
- Necesita ayuda con el botón de retroactiva para volver a la vista web
¿Cómo puedo hacer esto?
- Videos que no se reproducen en modo de pantalla completa
- Fling Gesture y Webview en Android
- Diálogo de carga de la vista web de Android
- android-O: caída de la aplicación con la vista web
- AdjustResize no funciona después de despedir el teclado haciendo clic en el teclado exterior
- Las actualizaciones de la caché de la aplicación se bloquean en el estado CHECKING
- Obtener la altura del contenido de WebView una vez que su Android cargado
- La vista Web de Android da el mensaje net :: ERR_CACHE_MISS
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>
- TabLayout se bloquea después de actualizar la biblioteca de soporte a 23.2.0
- ¿Dejar de presionar dos botones a la vez?