webview高度在nestedScrollView中无限增长

这是我的布局。 当我加载google.com时,webview的高度不断增长。 webview的onSizeChange函数不断被调用,我可以看到webview不断扩大。 我已经尝试了22.2.1和23.1.0的devise和appcompat库,没有效果。

任何解决scheme : – |

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

Solutions Collecting From Web of "webview高度在nestedScrollView中无限增长"

在一句话中, 不能把你的WebView放入NestedScrollView 这是按预期工作的。

如果将WebView放入NestedScrollView (或ScrollView )中,则WebView将使用View.MeasureSpec.UNSPECIFIED要求测量其尺寸。 无论你设置MATCH_PARENT ,甚至像你的WebView的高度,像100dp的固定大小。 NestedScrollView强制其子级使用View.MeasureSpec.UNSPECIFIED要求测量自己。 这一切都发生在NestedScrollViewmeasureChild()方法中。 它如下所示:

 @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); } 

MeasureSpec.UNSPECIFIED意味着,正如它的标签所暗示的,它可以是任意大小。 我认为Google I / O 2013的“为Android编写自定义视图”会话的这个幻灯片将帮助您理解它。

在这里输入图像说明

其实这是在这个线程中讨论的问题,根据这位Google工程师 ,

这就好像在桌面上一样,您将浏览器窗口调整为页面的高度,因此无法垂直滚动。 滚动发生在NestedScrollView而不是webview本身。 所以在页面中没有js的后果看到任何滚动事件,所以它不知道你已经滚动到页面的末尾加载更多的内容。

所以,底线是, 不要把你的WebView放入NestedScrollView 。 您应该让WebView自己滚动网页。 快乐的编码! 🙂

我很抱歉没有提前closures这个问题。 我们不能把一个webview内nestedScrollView。 但是,NSV的本质,它扩大了它的孩子的全高度,使它得到它按预期工作的工具栏得到可折叠/可滚动的工具栏等。因此,如果添加webview,web视图将无限增长或一个大价值,因此它不会像预期的那样工作。 这可以参考:code.google.com/p/android/issues/detail?id=198965