2012-01-25 12 views
14

Tengo en attrs.xmlselector de color Android no funciona con atributos personalizados

<resources> 
    <!-- theme specific colors --> 
    <attr format="reference|color" name="foreground" /> 
    <attr format="reference|color" name="background" /> 
</resources> 

Y de selección de color y luego en theme.xml

<style name="MyTheme" parent="android:Theme.Black"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="foreground">#0000FF</item> 
    <item name="background">#00FF00</item> 
</style> 

también creé nombrado forground_to_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:color="?background"/> <!-- pressed --> 
    <item android:state_focused="true" android:color="?background"/> <!-- focused --> 
    <item android:color="?foreground"/> <!-- default --> 
</selector> 

Ahora me gustaría usar todo junto en TextView:

<TextView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:textColor="@color/forground_to_background" /> 

Lamentablemente no funciona. En lugar de tener bonitos colores azul verdoso, solo tengo un color: rojo. TextView siempre es rojo. Cuando cambio TextView para usar el color "? Primer plano" cambiará. Además, cuando cambio el selector de colores de "? Xxxx" a un valor codificado como "# 00f" el color comienza a funcionar.

¿Dónde está el problema? ¿Qué estoy haciendo mal?

Editar: Creo que es duplicado de problema/error Can a selector resource use a color defined in a style?

Edit2: Por otra parte cuando intento utilizar este TextView en la aplicación se bloquea ListView. No puede analizar XML.

+0

Aparentemente el problema se solucionó en la vista previa de Android L, detalles aquí: https://code.google.com/p/android/issues/detail?id=26251 –

+0

¿Encontró la respuesta a su pregunta? Tengo el mismo problema – Pavya

Respuesta

5

La razón por la que esto sucede es porque tengo un Contexto diferente. Mientras inflando Context está al tanto de mis atributos de tema, pero al adaptador ListView pasé ApplicationContext que no tenía conocimiento de esos atributos. Ahora no sé por qué no los conoce;)

+0

Para obtener más información sobre el contexto, vaya aquí: http://www.doubleencore.com/2013/06/context/ El contexto diferente sabe cosas diferentes ... – Mikooos

+0

Un error tan tonto que me estaba golpeando la cabeza la pared. Nunca pensé que podría equivocarme con un error tan simple. Salvaste mi día. –

0

¿Estás seguro de si estás aplicando MyTheme a la actividad o a la vista de texto? Otra cosa que puedes probar es que en lugar de usar el "?" operador en su forground_to_background.xml, tratando de usar "@" en su lugar. ver si eso soluciona su problema

+0

Estoy seguro de que uso MyTheme :) No puedo usar el proyecto "@" no se compilará. – Mikooos

+0

Creo que el primer plano no funcionará. Intente utilizar @ color/foreground – CChi

11

No puede hacer referencia a? Attr/al elegir colores para un selector. Lo que puede hacer, si desea colores por tema en su selector, es crear múltiples selectores que hagan referencia a @ color/y dibujar/y luego tener un atributo "referencia" que asocie uno de los selectores con el estilo dado.

<attr name="forground_to_background" format="reference" />

A continuación, tiene que establecer el color de texto como

android:textColor="?attr/forground_to_background" 

Creo que el texto era siempre de color rojo debido a Android era la interpretación de valor entero del attr como un color (rojo), en lugar de utilizar es como una búsqueda de lo que realmente quería.

Cuestiones relacionadas