ViewGroup setClipToPadding() 메서드의 비밀

ViewGroup의 setClipToPadding()라는 흔하게 사용하지 않은 메서드가 있다. 이 메서드는 아주 복잡해질 수 있는 작업은 쉽게 단번에 해결해주는 강력한 기능을 가지고있다. Padding을 Clip하도록 설정 할 수 있는 기능이다. 기본값은 true이며, false일 경우 Clip되지 않고 ViewGroup 내부에 패딩영역이 잡히게된다.

예를 들어보자. ListView에서 최상단의 영역에 Padding을 주고 싶은 경우, HeaderView에 빈 공간을 가진 View를 추가하거나 포지션이 첫번째 일경우 상단에 Padding이나 Margin값을 설정 하여 처리 했을 것이다. 하지만 setClipToPadding(false)를 주게 되면 레이아웃에 잡혀 있는 패딩이 ChildView에 먹히게 된다.

또, 다른 예제를 들어보자.

ViewPager는 현재 보이는 화면과 좌/우 총 3가지의 ViewGroup으로 이루어진다. 현재 보이는 화면에 좌우 화면이 약간 보이게 하기위해서(페이스북 앱에서 이미지를 표시할때 양옆으로 조금씩 보이는) 많은 고민이 필요로 할 것이다.

하지만 setClipToPadding(false);를 통해서 아주 간단하게 구현 가능하다.

XML

<android.support.v4.view.ViewPager 
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    andorid:clipToPadding="false"
    android:paddingLeft="120dp"
    android:paddingRight="120dp" />

JAVA CODE

mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setClipToPadding(false);

XML에서는 android:clipToPadding을 이용하면되고, Code를 통해서는 setClipToPadding()메서드를 이용하면된다.