[AndroidStudio] background vs backgroundTint 차이

chaemin·2022년 10월 7일

안드로이드

목록 보기
1/7

안드로이드 프로젝트를 진행하면서 버튼 때문에 당황했던 적이 한 두 번이 아니다.

버튼은 당신이 그 어떤 색을 설정해도 보라색이 될 것이다.



background vs backgroundTint


안드로이드 공부를 하면서 자주 들어가봐야 하는 사이트는 바로 공홈이다.

버튼의 색상을 지정하는 속성 background, backgroundTint는 모두 View 클래스의 XML 속성(Attributes)이다.

XML attributes
XML 요소들에 부가적으로 추가할 수 있는 정보
(part of XML element)

background

처음부터 background에 별 의심하지 않고 color만 넣긴 했지만,
사실 background는 해당 속성을 추가할 위젯의 background처럼 사용할 drawable를 지정해주는 속성이다.

drawable
화면에 그릴 수 있는 리소스이다.
such as a PNG image, 9-patch, XML state list description...

이미지를 참조하거나 색을 지정할 수 있다.


backgroundTint

backgroundTint는 background에 적용되는 속성이고,
마찬가지로 색의 값을 넣을 수 있다.


그런데 왜 생각대로 적용이 되지 않을까?


예시 코드를 다시 보자.

android:background="@color/white"

background의 색을 흰색으로 지정해주었음에도 불구하고 우리의 버튼 친구는 곧 죽어도 보라색이 좋다고 자신의 의지를 보여준다.


3가지의 경우

  1. background 만 적용
  2. backgroundTint 만 적용
  3. background + backgroundTint 둘 다 적용

분명 똑같은 값을 주었는데, backgroundTint에만 적용했을 때 색이 바로 나온다. 이유는 일단 버전 문제이다. 오래된 버전을 사용하면 버튼의 색상이 background로 적용이 되지 않는다고 한다. 그래서 해결 방안으로,

AppCompatButton를 사용하면 적용되는 것을 볼 수 있다.

https://developer.android.com/reference/androidx/appcompat/widget/AppCompatButton

AppCompatButton
1 - background Tinit 메소드를 통해서 background의 tint를 동적으로 변경
2 - backgroundTinit, backgroundTintMode를 사용해서 background tint 색상 변경 가능

또 하필 보라색인 이유는 backgroundTint의 기본값이 보라색이기 때문이다. 그래서. backgroundTint만 설정해주었을 때는 색상이 맞게 나오는 것을 볼 수 있다.

아무튼, 버전이 예전 버전이라면 background 이슈가 발생할 수 있다.
위와 같이 버튼을 바꾸어주면 backgroundTintMode 역시 정상적으로 사용 가능하다.


정리

  • background vs. backgroundTinit
    -> background는 drawable 리소스를 적용해주는 것(+색)
    -> backgroundTint는 background에 적용해주는 것

  • 버튼 색 적용이 되지 않을 때
    -> backgroundTint만 사용해준다
    -> AppCompatButton을 Button 대신 사용한다

참고 사이트

profile
창원대학교 컴퓨터공학과 대학원생

0개의 댓글