Surface 에 MaterialTheme.colorScheme.primary 를 넣으면 내부 TextColor 는 어떻게 자동 변경되는 것인가

고래상어·2022년 11월 17일
1

궁금증

컴포즈에서 기본 Surface 에 Text 를 작성하면 Text 의 font color는 BLACK이다.

그런데 Surface 에 color를 primary로 넣으면 Text의 font 색상은 WHITE 로 적용된다.

설정하지 않은 Text 의 색상은 어디서 적용되는걸까?

해결

Surface 를 찾아 들어가면 contentColor 가 있는데

이 contentColor 의 default 값은 contentColorFor 에서 적용된다.

그리고 이 contentColorFor 를 찾아들어가면
아래와 같이 primary 인 경우 onPrimary를 리턴하는 것을 볼 수 있다.
다시 말해 primary 를 지정 하면 onPrimary 를 리턴한다.

다시 돌아와서 Surface 의 인자로 전달된 contentColor 는 CompsitionLocalProvider 에 저장되게 된다.

그리고 다시 처음으로 돌아와서 Surface 내부에 Text 함수를 에서

내부로 들어가서 보면 textColor가 지정되지 않았으면 LocalContentColor 에서 값을 가져오는 것을 볼 수 있다.

profile
안드로이드 개발자 입니다

0개의 댓글