NestedScrollView Children으로 WebView와 혼합되어 사용하려고 했던 경우가 있었다. 스크롤에는 문제가 없었지만, height가 엄청 늘어나거나 Floating Button이 스크롤 마지막에 붙어있거나 하는 문제가 있었다. 이 문제는 어떻게 해결해야 할까?
NestedScrollView문제점
이 링크에 있는 내용을 참고해 한줄로 요약하면 다음과 같다.
In one sentence, you just can't put your WebView inside NestedScrollView.
왜 그런것일까?
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가 핵심인데, 사이즈가 자기 맘대로 될 수 있다...
/**
* Measure specification mode: The parent has not imposed any constraint
* on the child. It can be whatever size it wants.
*/
public static final int UNSPECIFIED = 0 << MODE_SHIFT;
그래서 웹뷰를 NestedScrollView안에 넣게되면 크기를 컨트롤 할 수 없게 된것이다.
MatchParent를 하든 100dp로 지정하든 상관없이 말이다.
그러므로, WebView에서 Scroll이 되도록 할 수 있게 변경하는것이 좋은것 같아 변경하게 되었다.
728x90
최근댓글