1. 사전지식
Style : View 모양을 지정하는 속성의 모음이다. 예를들어 font size, font color, background color 등과 같은 것을 지정하는 속성 모음이다!
한번 직접 Style을 정의(커스텀)해서 사용을 해보겠다.
2. 의문점 및 해결
2-1. 앱 전체의 기본 테마가 Material Theme가 기본 테마일때, 내가 Style을 정의해서 backgroud 속성에 대한 것을 정의했고, 그 Style을 Button에 적용을 시켰는데 반응이 일어나지 않는 경우를 살펴보자.
[의문점]
앱 전체의 기본 테마가 Material Theme가 기본 테마일때, 내가 Style을 정의해서 backgroud 속성에 대한 것을 정의했고, 그 Style을 Button에 적용을 시켰는데 반응이 일어나지 않는다. ( + style에 적용된 backgroud 속성이 eabled와 abled에 따라 색상이 달라져야 하는 것도 생각을 해야한다. )
아래에 구체적을 풀이하여 보겠다.
적용이 되지 않는 부분은 backgroud 부분으로 배경색이다.
==> 이유는 간단하다. 우리가 테마로 설정해둔 것(MeterialTheme) 때문에 변경되지 않고 그 테마의 기본값이 설정이 된 것이다.
해결 방법은 크게 2가지 이다.
1. 근본적으로 parent="Theme.MaterialComponents.Light"의 코드를 Theme.AppCompat.DayNight.NoActionBar 으로 바꾼다.
==> 이 방법은 옛날 버전의 AppCompat으로 돌아가는 것이고 임시방편으로 기능이 훨씬 많은 MaterialCompenents를 변경하지 않는것이 맞다.
2. background 속성이 아니라 backgroundTint 속성을 사용한다.
2-2. Style을 Button에 적용을 시켰다면, enabled 상태와 abled 상태에 따른 backgroud 색을 구분해보자.
==> 하지만 문제가 있다. 내가 원하는 것은 버튼이 enabled 상태와 abled 상태의 배경색이 달라야 한다는 것이다.
[해결]
원하는 구현 : 내가 원하는 것은 내가 만든 Style에 정의된 backgroud 속성이 Button에 적용이 되어야 하면 버튼이 enabled 상태와 abled 상태의 배경색이 달라야 한다는 것이다. ( 기본테마는 Material Theme이어야 한다. )
[대략적인 해결방안]
1. res에 color 폴더를 만들고 그 안에서 enabled 상태일때의 색을 지정하고 abled일때의 색을 지정해주고 그것을 backgroudTint에 넣어준다.
2. enabled일때는 backgroudTint에 enabled일 때 지정했던 색이 들어가고 abled일때는 abled일 때 지정했던 색이 들어가 바뀌게 될 것이다.
[직접 해결하기]
1. 1. res -> color 폴더 만들기
2. enabled 일 때의 원하는 색 넣기, abled 일 때의 원하는 색 넣기 (위에 있는 줄이 enabled 상태일때의 색 설정, 아래있는 줄이 abled상태일때의 색 설정)
3. 내가 직접 정의한 Style에 넣어주기
3. 결과물