2010-05-13 21 views
10

Chcę użyć kolorów z motywu, aby zastosować go do kodu HTML, który renderuje moja aplikacja. Zastanawiam się, czy mogę to zrobić?Jak wyodrębnić wartości kolorów (#rgb) z motywu systemu Android?

szukam używać kolorów jak są one określone w themes.xml:

<item name="colorBackground">@android:color/background_dark</item> 
    <item name="textColorPrimary">@android:color/primary_text_dark</item> 

Więc patrząc na nich są zadeklarowane w ten sam sposób. Pomyślałem więc, że mogę uzyskać do nich dostęp w ten sam sposób.

To nie jest jednak przyczyną. Podczas próby uzyskania dostępu do tych wartości w ten sposób:

TypedValue tv = new TypedValue(); 
    getTheme().resolveAttribute(android.R.attr.colorBackground, tv, true); 

    System.out.println("tv.string=" + tv.string); 
    System.out.println("tv.coerced=" + tv.coerceToString()); 

    int colorResourceId = getResources().getColor(tv.resourceId); 
    System.out.println("colorResourceId=" + colorResourceId); 

    tv = new TypedValue(); 
    getTheme().resolveAttribute(android.R.attr.textColorPrimary, tv, true); 

    System.out.println("tv.string=" + tv.string); 
    System.out.println("tv.coerced=" + tv.coerceToString()); 

    colorResourceId = getResources().getColor(tv.resourceId); 
    System.out.println("colorResourceId=" + colorResourceId); 

uzyskać to w wyniku:

I/System.out(1578): tv.string=null 
I/System.out(1578): tv.coerced=#ffffffff 
I/System.out(1578): colorResourceId=-1 

I/System.out(1578): tv.string=res/color/primary_text_light.xml 
I/System.out(1578): tv.coerced=res/color/primary_text_light.xml 
I/System.out(1578): colorResourceId=-16777216 

Wyniki są różne. Pierwszy daje mi kolor "#fffffff", który będzie dla mnie działał, drugi daje mi tylko xml.

Czy muszę przeskoczyć przez kilka dodatkowych kółek, aby rozwiązać faktyczny kolor? Czy mój pierwotny zamiar działa w ogóle? Może to nie zadziała, ponieważ kolory mogą być dowolnymi rysunkami?

Nie znalazłem żadnej istotnej dokumentacji , ale jeśli znasz, po prostu wskaż mi proszę.

Przy okazji. Próbowałem również uzyskaćStyledAttributes(), ale miał zasadniczo te same problemy.

+0

[Ta odpowiedź] (http://stackoverflow.com/a/6540378/15882) pokazuje, jak zmienić kolor int z powrotem na jego ciąg szesnastkowy. –

Odpowiedz

6

Myślę, że powinieneś zmienić nazwę colorResourceId na myColor lub coś w tym stylu, ponieważ to jest to, co powinno znajdować się w twoim kodzie, o ile wiem.

-16777216 jest odpowiednikiem dla 0xFF000000, który jest w kolorze czarnym, więc prawdopodobnie Twoim motywem był czarny tekst na białym tle.

Powiązane problemy