2010-09-21 19 views
16

Estoy tratando de usar un color definido en un stile en un selector pero está causando un Resources $ NotFoundException.¿Puede un recurso selector usar un color definido en un estilo?

En primer lugar he añadido un nuevo atributo a attr.xml:

<resources> 
    <attr name="unread_background" format="color" /> 
</resources> 

Entonces me define ese valor attr en styles.xml:

<style name="ThemeNoTitleBar" parent="android:Theme.NoTitleBar"> 
    <item name="unread_background">#000000</item> 
</style> 

Entonces traté de usar que attr en mi selector definición:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- other states snipped --> 
    <item android:state_selected="false" 
     android:drawable="?unread_background" /> 
</selector> 

Por último, la actividad utiliza el tema de estilo ThemeNoTitleBar en el manifiesto.

También intenté crear un color en colors.xml y hacer que use el nuevo atributo attr pero eso también falla.

Obviamente me falta algo, pero no estoy seguro de qué hacer para solucionarlo. Mi intención es crear múltiples temas y hacer que el selector use el color en el tema seleccionado actualmente.

Respuesta

0

Android button with different background colors Eche un vistazo al ejemplo. Parece que lo necesitas.

+0

Si sustituyo unread_background con un valor de color codificado entonces funciona bien, así que no creo que otra respuesta se aplica aquí. – toddler

+0

¿Encontró una respuesta para su pregunta? Tengo el mismo problema. –

1
<item android:state_selected="false" 
    android:drawable="?unread_background" /> 

esta sección anterior es incorrecta.

el dibujable solo hace referencia a un recurso dibujable. Vea este enlace. http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList

+0

Sin embargo, según la documentación (http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html#attr_android:src), el atributo src en un BitmapDrawable puede ser un atributo de tema. –

+1

Aún así, incluso si el atributo fuera una referencia y el estilo fuera dibujable, aún bloquearía el sistema porque Android solo permite atributos personalizados (? Whatever) para ser usados ​​en Vistas (al menos eso es lo que he deducido, realmente quiero estar equivocado!) – HGPB

1

Aquí hay algo que funciona por mí.

attrs.xml:

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

styles.xml, como hijo del tema principal:

<item name="color_selection">@color/selection_background_inverse</item> 

shape_background_selected.xml en la carpeta dibujable:

<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="?attr/color_selection"/> 
</shape> 

su archivo de selección, en mi caso: selector_background_recyclerview:

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/shape_background_selected" android:state_activated="true" /> 
    <item android:drawable="@drawable/shape_background_selected" android:state_pressed="true" /> <!-- pressed --> 
    <item android:drawable="@color/transparent" /> <!-- default --> 
</selector> 

finalmente, en XML de su punto de vista:?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/selector_recyclerview_item_background"../> 
Cuestiones relacionadas