2016-09-08 5 views
0

내 앱에서 모든 색상 런타임을 변경해야합니다. 앱은 회색으로 시작하고 사용자에게 성별을 선택하도록 요청합니다. 그들이 남성을 선택하면 앱이 파란색으로 바뀌고 여성을 선택하면 앱이 분홍색으로 변합니다.테마의 모든 스타일을 유지하면서 colors.xml을 프로그래밍 방식으로 어떻게 변경합니까?

내가 정의한 AppTheme 그 스타일 모든 위젯, res/values/colors.xml의 색상을 언급 차례로 또한 색상을 참조 배경에 대해 res/drawable 사용. 모두 꽤 견고하고 깔끔하게 함께 묶여있는 것 같습니다. 그래서 이걸 재사용하고 싶습니다.

내가 어떻게 든 res/values/colors.xml을 바꾼다면, 모든 것이 잘 될 것이지만 이것이 가능하지 않다는 것을 두려워하고 나는 이것을 처음부터 어떻게하는지 모른다. 나는 내 테마를 AppTheme.BlueAppTheme.Pink에 복사하여 붙여 넣어야 할 것 같지만,이 모든 것들은 매번 drawable/*에 가깝게 바뀌기 때문에 아주 끔찍합니다.

이렇게하는 방법? 별도의 colors.xml을 가질 수있는 트릭이 있어야합니다 ...

+0

http://stackoverflow.com/questions/4663752/switching-application-wide-theme-programmatically – Stallion

+0

@Stephan Henningsen plz에서이 라이브러리를 확인하십시오. https://github.com/negusoft/GreenMatter, https : //github.com/negusoft/holoaccent –

+0

@ Stallion이 질문에 대한 답변을 볼 수 없습니다. –

답변

0

colors.xml을 변경할 수 없으며 대신 색상을 가리키는 테마 속성을 사용하여 테마를 만듭니다. 따라서 한 테마에서 속성 primary_dark는 검은 색을 가리키고, 다른 테마에서는 회색을 가리킬 수 있습니다. 그런 다음 스타일이 색상이 아닌 테마 속성을 가리 키도록하십시오. 이렇게하면 런타임에 테마를 변경할 수 있으며 속성/스타일에 매핑되는 색상이 변경됩니다. 이렇게하는 방법에 대한 멋진 가이드가 있습니다. http://www.hidroh.com/2015/02/25/support-multiple-themes-android-app-part-2/

관련 문제