2013-03-11 11 views
7

Zdefiniowałem temat i styl w mojej aplikacji. Ikony (rozciągliwej) są definiowane przy użyciu odniesienia w pliku stylu jakoJak odzyskać drawable z referencji atrybutów

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

i stylu jak

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

muszę odzyskać rozciągliwej programowo używać dobrego wizerunku w dialogfragment. Jeśli zrobię jak

mydialog.setIcon(R.style.myicon); 

Dostaję id równa 0, więc nie ma obrazu

Próbowałem użyć czegoś jak

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); 

Próbowałem różnych rzeczy, jak to, ale wynik jest zawsze 0 lub zero: -/

Jak mogę to zrobić?

Odpowiedz

11

znalazłem rozwiązanie na 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

Nie zapomnij zadzwonić do a.recycle –

+0

Dla każdego, kto się zastanawia: 'a.recycle()' zasygnalizuje, że przydzielona pamięć nie jest już używana, a dane związane z 'a' mogą zostać zwrócone puli pamięci natychmiast, zamiast czekać na odśmiecanie. Jak odpowiedział [tutaj] (http://stackoverflow.com/questions/7252839/what-is-the-use-of-recycle-method-intypedrray) – Prof

0

Wydaje się, że próbujesz ustawić ikonę swojego myDialog wykorzystaniem zasobów i próbuje uzyskać do niego dostęp za pośrednictwem R.style ale twój inny kod segment prowadzi mnie do przekonania, że ​​masz zasób znajdujący się w R.drawowalnym

Mając to na uwadze, powinieneś być w stanie uzyskać pożądany efekt dzięki myDialog.setIcon (R.drawable.myicon);

Powiązane problemy