2012-01-21 9 views
21

provo a fare un Drawable utilizzando attributo ma ho un errore di gonfiaggioUtilizzando attributo per modificare un elemento drawable colore

01-21 11:01:06.171: E/AndroidRuntime(13695): Caused by: android.content.res.Resources$NotFoundException: 
File res/drawable/action_bar_background.xml from drawable resource ID #0x7f020000 

mio action_bar_background.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" > 
    <gradient 
     android:angle="90" 
     android:endColor="?attr/ActionBarEndColor" 
     android:startColor="?attr/ActionBarStartColor" 
    /> 
</shape> 

mio attr.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <attr name="ActionBarStartColor" format="reference|color" /> 
    <attr name="ActionBarEndColor" format="reference|color" /> 
</resources> 

My themes.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.Theme1" parent="@style/Theme.GreenDroid.Light.NoTitleBar"> 
     <item name="ActionBarStartColor">@color/greyDark</item> 
     <item name="ActionBarEndColor">@color/greyLight</item> 
    </style> 

    <style name="Theme.Theme2" parent="@style/Theme.GreenDroid.Light.NoTitleBar"> 
     <item name="ActionBarStartColor">@color/myRed</item> 
     <item name="ActionBarEndColor">@color/myWhite</item> 
    </style> 
</resources> 

Non capisco perché, il mio attributo è un riferimento o un colore, se "forza" il colore in themes.xml, non funziona troppo.

Qualcuno può aiutare?

Ho trovato this question ma non risolve il mio problema.

+0

L'unica soluzione Ho trovato, è di utilizzare più file disegnabile con il colore scelto e fare il riferimento nel file del tema. – Ahmet

+1

Questo problema è stato risolto nell'anteprima di Android L, come specificato qui: https://code.google.com/p/android/issues/detail?id=26251 –

+0

Ho trovato risolto in Lollipop, ma ancora non funziona Kitkat e meno –

risposta

12

Buone notizie a tutti! A partire da Lollipop (21) puoi usare gli attributi per fare riferimento a cose come i colori, ad es. ?attr/colorPrimary.

risposta originale:

Per quanto so che non è possibile fare riferimento attributi di stile da drawable, non riuscivo a trovare un uso simile in risorse della piattaforma Android ($ANDROID_HOME/platforms/android-*/data/res/), tutto quello che vedo è che ogni drawable anche per gradiente i drawable sono definiti in posizione o fanno semplicemente riferimento ad altri drawable come i colori drawable.

Ecco un bug report relative a questo (stella di esso):

https://code.google.com/p/android/issues/detail?id=26251

È possibile risolvere questo utilizzando drawable XML separati come spiegato in:

https://stackoverflow.com/a/13471695/172670

+0

Sfortunatamente andrà ancora in crash su qualcosa di inferiore all'API 21. (Quindi sui dispositivi che eseguono KitKat o inferiore si bloccherà ancora.) –

Problemi correlati