본문 바로가기

안드로이드

TextView로 CustomButton을 만든다고!?

내용

요구사항에 맞게 Button에 padding 값을 줬는데 디자인과 너무 상이한 버튼이 나왔다.

 


vertical과 horizontal의 padding이 각각 9dp, 12dp인 얄상한 모양의 버튼이다.

위의 피그마 이미지와는 육안으로도 다른 것이 보일 정도로 뚱뚱한 버튼이 생성이 되었다.
오른쪽 사진을 보면 알 수 있듯이 paddingHorizontal은 12로 주고 paddingVertical은 9로 요구사항과 동일한 값을 적용한 상태였다.

해결

1. Button attribute minHeight, minWidth 오버라이드 해주기 (feat. 구글링)

2. Button 대신 TextView 사용 (feat. issac)

Why?

 버튼은 왜 뚱뚱하게 나왔었고 어떻게 해결이 된걸까?

Button

안드로이드 공식 문서

XML에서 작성된 Button이 inflating 될 때 위의 생성자가 호출이 되는데, 이때 AttributeSet에는 android:buttonStyle이 들어간다.

이 스타일에 어떤 설정들을 모두 확인하지는 못했지만, 로그를 통해 minimumSize, Padding 등의 값들이 설정되어있는 것을 확인할 수 있었다.

Button Log

 

Code

💡 inflate: 뷰를 메모리에 객체화 시키는 것

 

TextView

그러면 TextView로 했을 때는 왜 잘 나오는 걸까? 공식문서를 보았다.

파라미터 description란을 보니 버튼처럼 기본적으로 따로 스타일이 적용이 되는 것 같지 않다.(This value may be null)


TextView Log

또한 Button은 TextView를 상속받고 있고 생성자 쪽을 바라보면 TextView의 AttributeSet에만 @Nullable로 되어있는 것을 확인할 수 있다.

 

 

💡 Button은 TextView를 상속받고 있다.

 

정리

커스텀 버튼을 구현할 때는 Button 보다 TextView를 사용하는 것이 더 간편하다.
Button을 쓰고 싶다면 background drawable을 만들 때 minHeight, minWidth 값을 넣어서 사용하면 될 것 같다.

반응형