La altura de la webview crece indefinidamente dentro de un nestedScrollView
Este es mi diseño. Cuando carga google.com, la altura de la webview sigue creciendo indefinidamente. La función onSizeChange de la vista web sigue recibiéndose y puedo ver que la vista web continúa expandiéndose indefinidamente. He intentado 22.2.1 y 23.1.0 de las librerías de diseño y appcompat y sin efecto.
Alguna solución ? : – |
- WebView y HTML5 <video>
- ¿Cómo puedo desplazar un WebView a un punto específico en Android
- HTML localStorage es nulo en Android cuando se usa webview
- ¿Cómo puedo tomar una captura de pantalla de una vista web, capturar la página completa?
- Acceso al código JS desde una aplicación nativa de Android
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/black"> <android.support.v4.widget.NestedScrollView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="fill_vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <com.example.ajay.scrollabletoolbar.MyWebView android:id="@+id/webview" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentTop="true"/> </android.support.v4.widget.NestedScrollView> <android.support.design.widget.AppBarLayout android:id="@+id/appbarlayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true"> <android.support.v7.widget.Toolbar android:id="@+id/restricted_browser_toolbar" android:layout_width="match_parent" android:layout_height="?actionBarSize" android:background="@color/colorPrimary" app:layout_scrollFlags="scroll|enterAlways"> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#FFFFFF" android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true"> <EditText android:id="@+id/current_url" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_centerVertical="true" android:backgroundTint="@android:color/darker_gray" android:dropDownAnchor="@+id/restricted_browser_toolbar" android:hint="hint hint" android:imeOptions="actionGo|flagNoExtractUi" android:inputType="textNoSuggestions|textUri" android:paddingBottom="8dp" android:paddingEnd="8dp" android:paddingStart="8dp" android:singleLine="true"/> <ImageView android:id="@+id/clear_url_text" android:layout_width="48dp" android:layout_height="48dp" android:layout_alignRight="@+id/current_url" android:layout_centerVertical="true" android:layout_marginRight="8dp" android:src="@android:drawable/ic_menu_close_clear_cancel" android:visibility="gone"/> </RelativeLayout> </android.support.v7.widget.Toolbar> </android.support.design.widget.AppBarLayout>
- Llamar a métodos Android desde JavaScript
- El video IFRAME incorporado sigue reproduciéndose en segundo plano después de salir de la pantalla completa en Android
- Android - Multiple onReceivedHttpAuthRequest con WebView
- Webview no cambia el tamaño cuando aparece el teclado
- cómo leer el archivo .webarchive en android
- Solicitud de URL de visualización web de Android con cadena de consulta
- Phonegap uso de la aplicación android cpu en el fondo
- ¿WebView saveState () preserva variables / entorno de JavaScript?
En una frase, simplemente no puede colocar su WebView
dentro de NestedScrollView
. Esto está funcionando como se pretende.
Si coloca un WebView
dentro de NestedScrollView
(o ScrollView
), su WebView
mide sus dimensiones con el requisito View.MeasureSpec.UNSPECIFIED
. No importa que establezca MATCH_PARENT
o incluso un tamaño fijo como 100dp para la altura de su WebView
. NestedScrollView
obliga a sus hijos a medirse con el requisito View.MeasureSpec.UNSPECIFIED
. Todo sucede en el NestedScrollView
measureChild()
. Va como sigue:
@Override protected void measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) { ViewGroup.LayoutParams lp = child.getLayoutParams(); int childWidthMeasureSpec; int childHeightMeasureSpec; childWidthMeasureSpec = getChildMeasureSpec(parentWidthMeasureSpec, getPaddingLeft() + getPaddingRight(), lp.width); childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED); child.measure(childWidthMeasureSpec, childHeightMeasureSpec); }
Y MeasureSpec.UNSPECIFIED
significa, como su etiqueta implica, puede ser cualquier tamaño que desee. Creo que esta diapositiva de la sesión "Creación de vistas personalizadas para Android" en Google I / O 2013 te ayudará a entenderlo.
En realidad este es un problema que se discutió en este hilo , y de acuerdo con este ingeniero de Google ,
Esto es como si en el escritorio, cambia el tamaño de la ventana del navegador a la altura de la página por lo que no puede desplazarse verticalmente. El desplazamiento se está produciendo en NestedScrollView en lugar de webview en sí. Así que una consecuencia de no js en la página ve cualquier evento de desplazamiento, por lo que no sabe que ha desplazado hasta el final de la carga de la página más contenido.
Por lo tanto, la línea de fondo es, NO ponga su WebView
dentro de NestedScrollView
. Debe permitir que WebView
desplace la página web en sí. Codificación feliz! 🙂
Me disculpo por no cerrar esta pregunta antes. No podemos poner una vista web dentro de un nestedScrollView. Pero la naturaleza de un NSV, se expande a su hijo a toda su altura para que sea un conseguir que funcione como se espera con las barras de herramientas para obtener barra de herramientas desplegable / desplazable, etc Por lo tanto, si se agrega webview, la webvista crecerá indefinidamente o a un gran Valor y por lo tanto no funcionará como se esperaba. Esto puede ser una referencia: code.google.com/p/android/issues/detail?id=198965
- Sweep Gradient: Qué es y sus ejemplos
- Causado por java.lang.NullPointerException: Intenta invocar el método virtual 'int android.graphics.Bitmap.getWidth ()' en una referencia de objeto nulo