2010-05-13 14 views
10

Quiero usar colores de un tema para aplicarlo a algunos HTML que está representando mi aplicación. Me pregunto si puedo hacer eso.Cómo extraer valores de color (#rgb) de un tema de Android?

Busco a utilizar colores como el que se especifican en themes.xml:

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

Así mirarlos en que se declaran de la misma manera. Así que pensé que podría acceder a ellos de la misma manera también.

Sin embargo, esa no es la causa. Al intentar acceder a los valores de la siguiente manera:

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); 

consigo esto como resultado:

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 

Los resultados son diferentes. El primero en realidad me da el color "#fffffff" que funcionaría para mí, el segundo solo me da un xml.

¿Necesito saltar unos aros más aquí para resolver el color real? ¿Mi intención original funciona en absoluto? Tal vez no funcionará, porque los colores podrían ser extraíbles arbitrariamente?

No encontré ninguna documentación relevante, pero si conoce alguna, solo indíqueme allí por favor.

BTW. También probé getStyledAttributes(), pero esto tenía básicamente los mismos problemas.

+0

[Esta respuesta] (http://stackoverflow.com/a/6540378/15882) muestra cómo volver a poner el int de color en su cadena hexadecimal. –

Respuesta

6

Creo que debería cambiar el nombre de colorResourceId a myColor o algo así, porque eso es lo que se supone que debe ser en su código, hasta donde yo sé.

-16777216 es equivalente a 0xFF000000, que es de color negro, por lo que probablemente su tema sea texto negro sobre fondo blanco.

Cuestiones relacionadas