Android webview高度在nestedScrollView中无限增长

Android webview高度在nestedScrollView中无限增长,android,webview,android-coordinatorlayout,android-collapsingtoolbarlayout,nestedscrollview,Android,Webview,Android Coordinatorlayout,Android Collapsingtoolbarlayout,Nestedscrollview,这是我的布局。当我加载google.com时,网络视图的高度会无限期地增长。webview的onSizeChange函数不断被调用,我可以看到webview一直在无限期地扩展。我尝试了22.2.1和23.1.0版本的design和appcompat库,但没有效果 有什么解决办法吗-| <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/andro

这是我的布局。当我加载google.com时,网络视图的高度会无限期地增长。webview的onSizeChange函数不断被调用,我可以看到webview一直在无限期地扩展。我尝试了22.2.1和23.1.0版本的design和appcompat库,但没有效果

有什么解决办法吗-|

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


用一句话来说,您不能将
WebView
放入
NestedScrollView
中,这是正常工作的

如果将
WebView
放入
NestedScrollView
(或
ScrollView
)中,则
WebView
会根据需要测量其尺寸。无论您为
网络视图的高度设置
匹配父视图
,甚至设置固定大小,如100dp
NestedScrollView
强制其子对象使用
View.MeasureSpec.UNSPECIFIED
要求进行自我测量。这一切都发生在NestedScrollView的方法中。它是这样的:

@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
的意思是,正如它的标签所暗示的,它可以是它想要的任何大小。我认为这张来自的幻灯片将帮助您理解它

实际上这是一个在,根据,

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


所以,底线是,不要将
WebView
放在
NestedScrollView
中。您应该让
WebView
滚动网页本身。快乐编码!:)

我很抱歉没有提前结束这个问题。我们不能将网络视图放在嵌套的滚动视图中。但NSV的本质是,它将其子级扩展到其全部高度,从而使其能够按预期使用工具栏,以获得可折叠/可滚动的工具栏等。因此,如果添加webview,webview将无限期增长或增长到一个较大的值,因此它将无法按预期工作。这可以是一个参考:code.google.com/p/android/issues/detail?id=198965

我想我不能使用固定的大小。我希望webview在所有手机和平板电脑上都能显示完整的窗口。当然,你可以轻松地将窗口大小设置为webview,为什么你认为你不能?我尝试将其设置为固定大小。硬编码和窗口大小。问题是webview没有;不要滚动。如果我有一个硬编码的值,比如800dp,那么webview会显示一个网页更新800dp,并在更新之后剪掉这些内容。所以我;I’我看不见它下面的部分。我尝试了一个基于不同SO帖子的类似方法,但遇到了同样的问题。Webview不会加载超出设置大小的网页。我认为应该有一个更干净的解决方案WebView应该有自己的滚动,应该像firefox一样,如果网页比它应该有滚动的窗口大。。。您是否尝试过:setVerticalScrollBarEnabled(true);?它已启用。如果我删除nestedScrollView,webview可以正常工作,滚动也可以正常工作,但问题是,如果没有
nestedScrollView
,即使您添加了
app:layout\u behavior=“com.google.android.material.behavior.HideBottomViewOnScrollBehavior”
这正是我想要指出的,
WebView
中的plus缩放控制也将丢失。可悲的是,没有解决办法。