2013-03-11 15 views
7

Ho definito tema e stile all'interno della mia app. Icone (disegnabili) vengono definiti tramite riferimento nel file di stile comeCome recuperare drawable dagli attributi di riferimento

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

e stile come

<style name="CustomTheme" parent="android:Theme.Holo"> 
    <item name="myicon">@drawable/ajout_produit_light</item> 

ho bisogno di recuperare il drawable a livello di codice per utilizzare la buona immagine in un dialogfragment. Se faccio come

mydialog.setIcon(R.style.myicon); 

ottengo un id è uguale a 0, quindi nessuna immagine

Ho cercato di usare qualcosa come

int[] attrs = new int[] { R.drawable.myicon}; 
TypedArray ta = getActivity().getApplication().getTheme().obtainStyledAttributes(attrs); 
Drawable mydrawable = ta.getDrawable(0); 
mTxtTitre.setCompoundDrawables(mydrawable, null, null, null); 

Ho provato diverse cose del genere, ma risultato è sempre 0 o null: -/

Come posso fare questo?

risposta

11

ho trovato la soluzione su Access resource defined in theme and attrs.xml android

TypedArray a = getTheme().obtainStyledAttributes(R.style.AppTheme, new int[] {R.attr.homeIcon});  
int attributeResourceId = a.getResourceId(0, 0); 
Drawable drawable = getResources().getDrawable(attributeResourceId); 
+5

Non dimenticare di chiamare a.recycle –

+0

Per chiunque altro si chiedesse: 'a.recycle()' segnalerà che la memoria allocata non è più in uso e che i dati associati a 'a' possono essere restituiti a il pool di memoria immediatamente anziché attendere la garbage collection. Come risposta [qui] (http://stackoverflow.com/questions/7252839/questo-è-il-uso-di-recycle-metodo-in-typedarray) – Prof

0

Sembrerebbe come se si sta cercando di impostare l'icona del vostro myDialog utilizzando una risorsa e stanno cercando di accedervi tramite R.style ma il vostro altro codice segmento mi porta a credere che tu abbia la risorsa situata in R.drawable

Con questo in mente dovresti essere in grado di ottenere l'effetto desiderato con myDialog.setIcon (R.drawable.myicon);

Problemi correlati