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 ? : – |

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

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.

Introduzca aquí la descripción de la imagen

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

  • Appcache en Android Webview no descargar fuentes
  • Android WebView no está cargando el sitio web en caché si no hay conexión
  • Cómo enviar parámetros a un archivo local en un WebView en android?
  • Dipaly farsi texto en la web de android (para los teléfonos que no apoyan farsi)
  • Android - AdSense en WebView (para BlackBerry Playbook - Android Runtime)
  • Solicitud de publicación de Android WebView con encabezados personalizados
  • Abrir vínculos externos en el navegador con la vista web de Android
  • Android WebView: acceso a clases desde un iframe dentro de otro iframe
  • WebView no carga la página web
  • ShouldInterceptRequest en Android 4.4 KitKat
  • Cómo configurar la cookie en el cliente androide de WebView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.