안드로이드 개발을 하다보면 버튼에 대한 기능구현은 필수적이다.
버튼을 UI에 나타내기 위해선 xml파일에 Button객체를 맨들어줘야하는데 기본적으론 저 아재냄새 펄펄나는 보라색이 default로 되어있다.
background속성에서 컬러값을 지정해주면 원하는 색깔로 바뀌어야 정상인데 Button은 이상하게도 바뀌지 않는다.
이 문제에 대해선 예전에 이미 해결책을 찾아서 상관이 없었지만 원인에 대해서 갑자기 궁금해져 이번글을 작성해본다.
제목과 같이 Button을 android.widget.Button으로 바꾸면 background속성이 잘 먹힌다.
이러한 이유를 찾아보니 기본적으로 theme.xml의 style이 MaterialComponents를 상속받고 있고, 이 style은 background속성이 없어서 발생하는 문제라고 한다. 하지만 textview는 background가 잘 먹는걸 보니 모든 view객체에 대해 background속성이 없는건 아닌 것 같다.
아무튼 Button에서 android.widget.Button으로 바꾸면 background속성이 있는 android.widget이라 적용이 되는듯 하다.
theme의 style을 Theme.AppCompat.Light로 바꾸면 background속성이 잘 먹힌다고는 하나, style이 바뀌는거라 추후에 원하지 않는 버그가 생길 수 있다는 점을 생각해보면 Button만 부분적으로 바꾸는 것이 낫다고 생각함.
다른 하나는 background대신 backgroundTint속성을 이용해도 적용이 되는데, 이상하게 얘는 지 알아서 margin이 적용된다.
1. background
2. backgroundTint
이에 대해 backgroundTint에 대한 설명을 찾아봤는데, 색과 이미지를 섞을 수 있는(?) 속성인 듯 하다. 기존 background에 있는 이미지에 backgroundTint에 컬러값을 줘서 음영을 발생시켜 결과적으로 Button이 더 또렷해지는 효과를 얻을 수 있다한다. 그래서 2번 사진과 같이 backgroundTint옵션만 주게 되면 위아래는 음영을 줘야하기에 지정된 색깔로 칠해지지 않는듯 하다.
이번글은 뭔가 찝찝하고 명쾌하게 이해하지 못했다. 원래 이런 스타일은 아닌데 backgroundTint에 대한 정보가 너무 없다.
답은! 안써야징!
Button의 배경색을 바꾸는 3가지 방법
1. Button을 android.widget.Button으로 변경
2. theme.xml의 style을 Theme.AppCompat.Light로 변경
3. background대신 backgroundTint로 변경
나는 android.widget.Button이 젤 속편하다 생각든다.