NestedScrollView Children으로 WebView와 혼합되어 사용하려고 했던 경우가 있었다. 스크롤에는 문제가 없었지만, height가 엄청 늘어나거나 Floating Button이 스크롤 마지막에 붙어있거나 하는 문제가 있었다. 이 문제는 어떻게 해결해야 할까?

 

NestedScrollView문제점

 

webview height grows indefinitely inside a nestedScrollView

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

stackoverflow.com

이 링크에 있는 내용을 참고해 한줄로 요약하면 다음과 같다.

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
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기