2011-12-25 2 views
18

나는이 질문이 이미 어딘가에 대답되었다고 확신한다. 그냥 너무 흔한 것 같습니다. 그러나 나는 그 해답을 찾을 수 없다. 나는 또한 해결책을 찾아 낼 수 없다.선택한 위젯의 테마 별 색상

내가 다른 배경 색상을 내 TableRow의 중 하나를 원하는 :

다음은 문제입니다. 간단합니다. 그냥 추가하면됩니다.

android:background="#123456" 

TableRow의 XML 선언에서. 그러나 저는 또한 제 신청서에 두 가지 주제가 있기를 바랍니다. 다른 테마에서 TableRow는 다른 배경색을 가져야합니다. 난 그냥 테마 안에 색상 값을 정의하고 그것을 사용하는 방법을 찾을 수 없습니다. TableRow의 선언에,

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <color "my_cool_color">#123456</color> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <color "my_cool_color">#654321</color> 
</style> 

그리고 : :이 같은 것을 입력하고 싶습니다 내가 테마를 변경할 때

android:background="@color/my_cool_color" 

그래서, 하나 TableRow의 배경의 색상도 변경됩니다. 나는 여러 시간 동안 많은 방법을 시도해 봤지만 성공하지 못했습니다 ... 제가 시도하지 않은 한 가지는, TableRow를 기반으로하는 자체 위젯을 작성하고 그것에 대한 별도의 스타일을 선언하는 것입니다. 너무 단순한 문제에 대한 너무 무거운 솔루션.

답변

51

속성을 사용하여이를 수행 할 수 있습니다. 당신의 styles.xml에 그런

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="myCoolColor" format="color" /> 
</resources> 

각 테마 myCoolColor을 정의 : 먼저 (이 파일은 '값'폴더 아래에 간다) attrs.xml에 속성을 정의 이제

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <item name="myCoolColor">#123456</item> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <item name="myCoolColor">#654321</item> 
</style> 

, 배경으로 myCoolColor를 지정 보기 :

android:background="?myCoolColor" 

더 자세히 가서 색상 참조를 사용하여 색상을 정의 된 상태로 유지할 수 있습니다. n 한 곳.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="myCoolColor" format="color|reference" /> 
</resources> 
styles.xml 변경

각 테마의 색상을 참조하기 :

<style name="Theme.MyApp" parent="@style/Theme.Light"> 
    <item name="myCoolColor">@color/blue</item> 
</style> 

<style name="Theme.MyApp.Dark" parent="@style/Theme.Dark"> 
    <item name="myCoolColor">@color/green</item> 
</style> 

마지막의 색상을 정의에 대한 참조를 포함하는 속성을 변경합니다 (우리는 컬러 또는 참조를 사용할 수 있습니다) 귀하의 colors.xml :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <color name="blue">#0000FF</color> 
    <color name="green">#00FF00</color> 
</resources> 

그게 전부입니다!

+0

고마워요! attr.xml에 대해 뭔가 알았지 만 적절한 예제를 찾을 수 없습니다. 반대로, 당신의 대답은 더 완전 할 수 없습니다! – user1234567

+0

나는 당신의 답을 매우 유용하게 찾았고 나의 문제도 해결했습니다. +1. 하지만 여전히 문제가 하나 있는데 코드에서 정의 된 색상을 사용하고 싶습니다. XML에서 attrs의 색상을 사용하는 방법은 무엇입니까? – Sandra

+0

예,하지만 어두운 테마를 사용하는 경우 색상을 파란색으로, 다른 녹색으로 지정하고 싶습니다. 하지만 어떻게 코드에서 올바른 색상을 얻을 수 있습니까? – Sandra

관련 문제