2012-03-23 2 views
5

Ho una domanda sull'utilizzo di riferimenti in un layer-listdrawable.Riferimento colore in <item> -Tag, all'interno <layer-list>

Desidero utilizzare un pulsante personalizzato nella mia app, costituito da un layer-list.

  • Quella è la finale drawable btn.xml per il pulsante, fatto di un selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/btn_pressed" android:state_pressed="true"/> 
    <item android:drawable="@drawable/btn_normal"/> 
</selector> 
  • Il pressato-stato-drawable btn_pressed sembra che:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item> 
     <shape android:shape="rectangle" > 
      <solid android:color="?custom_color" /> 
     </shape> 
    </item> 
    <item android:drawable="@drawable/btn_normal"/> 
</layer-list> 

La parte essenziale è la linea, wh prima dichiaro il colore come riferimento a custom_color, che definisco come segue.

  • attrs.xml:
<resources> 
    <attr name="custom_color" format="reference|color" /> 
</resources> 
  • themes.xml:
<resources> 
    <style name="MyTheme" parent="android:Theme.Light.NoTitleBar"> 
     <item name="custom_color">#ff33b5e5</item> 
    </style> 
</resources> 

Eclipse mi dà errori a tutti, e si compila bene. Ma quando avvio l'applicazione sul mio ICS Nexus S o sull'emulatore (indipendentemente dalla versione), si blocca. punti logcat il seguente out:

03-23 ​​14: 33: 38,832: E/AndroidRuntime (636): a causa di: android.content.res.Resources $ NotFoundException: res file/drawable/btn.xml da ID di risorsa drawable # 0x7f020006

[...]

03-23 ​​14: 33: 38,832: E/AndroidRuntime (636): a causa di: android.content.res.Resources $ NotFoundException: res file/drawable/btn_pressed.xml dall'ID risorsa drawable # 0x7f020009

Se commento o ut, il shape -elemento nel layer-list, o impostare il colore hard-coded, tutto funziona. Quindi sembra esserci un problema nel fare riferimento agli attributi in un elenco di livelli.

Quindi qualcuno conosce una soluzione a questo problema? Voglio cambiare i colori in quella lista di livelli, a seconda del tema, che la mia applicazione sta usando.

risposta

1

Ok, sembra che questo è un bug che non è stato guardato fino Android L.
Maggiori dettagli sul Issue Tracker Android: Issue 26251

Dovrebbe essere fissato in Android L, ma almeno il test con l'anteprima di Android L nell'emulatore non sembra funzionare completamente, ancora.Almeno non bloccherà l'app, ma invece di mostrare il colore corretto, mi dà solo trasparenza (# 00ffffff). Forse questo non è il caso sui dispositivi e/o una volta rilasciato Android L stable.

0

Prova android:color="@color/custom_color"

+0

Questo non ha funzionato, no. Non viene nemmeno compilato. – msal