问题描述
这是我的布局.当我加载 google.com 时,webview 的高度会无限增长.webview 的 onSizeChange 函数不断被调用,我可以看到 webview 不断扩展.我已经尝试了 22.2.1 和 23.1.0 的设计和 appcompat 库,但没有效果.
有什么解决办法吗?:-|
实际上,这是一个在该线程,并且根据这位 Google 工程师,>
这就像在桌面上一样,您将浏览器窗口的大小调整为页面的高度,因此它无法垂直滚动.滚动发生在 NestedScrollView 而不是 webview 本身.所以页面中没有js的结果是看到任何滚动事件,所以它不知道你已经滚动到页面末尾加载了更多内容.
所以,最重要的是,不要将您的 WebView
放在 NestedScrollView
中.您应该让 WebView
滚动网页本身.快乐编码!:)
This is my layout. When i load google.com, the webview's height keeps growing indefinitely. The onSizeChange function of the webview keeps getting called and i can see the webview keeps expanding indefinitely. I've tried 22.2.1 and 23.1.0 of the design and appcompat libraries and no effect.
Any solution ? :-|
<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>
解决方案 In one sentence, you just can't put your WebView
inside NestedScrollView
. This is working as intended.
If you put a WebView
inside NestedScrollView
(or ScrollView
), your WebView
measures its dimensions with View.MeasureSpec.UNSPECIFIED
requirement. No matter you set MATCH_PARENT
or even fixed size like 100dp for your WebView
's height. NestedScrollView
forces its children measure themselves with View.MeasureSpec.UNSPECIFIED
requirement. It all happens at NestedScrollView
's measureChild()
method. It goes like below :
@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);
}
And MeasureSpec.UNSPECIFIED
means, as its label implies, it can be whatever size it wants. I think this slide from the "Writing Custom Views for Android" session at Google I/O 2013 will help you to understand it.
Actually this is an issue which was discussed in this thread, and according to this Google engineer,
So, bottom line is, DO NOT put your WebView
inside NestedScrollView
. You should let WebView
scroll the web page itself. Happy coding! :)
这篇关于webview 高度在nestedScrollView 内无限增长的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!