본문 바로가기
안드로이드

버튼 패딩 제거하기

by 호군 2014. 1. 8.
반응형


안드로이드에서 기본 제공하는 widget들을 사용하다보면, 커스텀 widget을 사용하는 경우가 많습니다. 그런데 widget의 기본 디자인를 사용하지 않고, 별도의 디자인을 사용 하는 경우 원하지 않는 패딩이 적용되는 경우가 있습니다.


튼을 예로 들어서 설명하겠습니다.

버튼의 경우 기본 패딩이 있고, 그보다 작은 패딩을 설정하려고하면, Top/Bottom의 경우에는 정상적으로 적용되지 않습니다. 물론 기본 패딩보다 큰 패딩은 아래와 같은 방법을 하지 않아도 정상적으로 동작합니다.


일반적으로 XML에 커스텀 버튼을 사용하게 되면, 아래와 같이 사용하게 될 것 입니다.

<button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:background="@drawable/btn_custom"

    android:text="@string/button"

    android:textsize="16sp"

/>



그러나 버튼의 배경 이미지가 XML로 만들어진 이미지이거나 색상 값이라면, 원하지 않는 패딩 값이 적용되는 것을 볼 수 있습니다. 이때 android:minWidth와 android:minHeight를 설정하면 원하지 않는 패딩 값이 적용되지 않는 것을 확인 할 수 있습니다.

링크는 stackoverflow의 한 답변 입니다.

<button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:minWidth="0dp"

    android:minHeight="0dp"

    android:background="@drawable/btn_custom"

    android:text="@string/button"

    android:textsize="16sp"

/>



왜 이런 현상이 발생하는지 이유는 확인해보지 못했습니다. 어쨌든 이젠 자신이 원하는 패딩 값을 설정해서 사용하시면 됩니다.

<button

    android:layout_width="wrap_content"

    android:layout_height="wrap_content"

    android:minWidth="0dp"

    android:minHeight="0dp"

    android:background="@drawable/btn_custom"

    android:paddingLeft="30dp"

    android:paddingTop="10dp"

    android:paddingRight="30dp"

    android:paddingBottom="10dp"

    android:text="@string/button"

    android:textsize="16sp"

/>




이젠 소스코드에서 설정하는 방법을 보겠습니다.

Button button = new Button(context);

button.setMinWidth(0);

button.setMinHeight(0);

button.setMinimumWidth(0);

button.setMinimumHeight(0);


button.setPadding(5, 5, 5, 5);

이유는 모르지만, setMinWidth()와 setMinHeight()만 설정해서는 Top/Bottom 패딩이 정상적으로 적용되지 않습니다. 또한  setMinimumWidth()와 setMinimumHeight()만을 설정한다고 Top/Bottom 패딩이 적용되지도 않습니다.

이 메소드 모두를 설정해줘야 Top/Bottom 패딩이 정상적으로 적용됩니다.




이런 현상이 발생하는 이유를 확인하면 이 페이지에 추가적으로 작성하겠습니다.




반응형