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,
This is as if in desktop, you resize the browser window to height of the page so it can't scroll vertically. The scrolling is happening in NestedScrollView rather than webview itself. So a consequence of no js in the page sees any scroll events, so it doesn't know you've scrolled to the end of the page load more content.
So, bottom line is, DO NOT put your WebView
inside NestedScrollView
. You should let WebView
scroll the web page itself. Happy coding! :)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…