2013-03-11 92 views
7

我在我的應用程序中定義了主題和樣式。圖標(繪製)使用的樣式文件中引用作爲如何從屬性檢索drawable參考

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

和風格

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

我需要以編程方式檢索繪製在dialogfragment使用的良好形象定義。 如果我做出這樣

mydialog.setIcon(R.style.myicon); 

我得到一個ID等於0,所以沒有像

我試圖用類似

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

我想這樣的不同的東西,但結果總是0或空的: -/

我如何我能做到這一點?

回答

11

我發現 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

不要忘記a.recycle – 2016-03-15 17:07:27

+0

呼籲任何其他人在想:'a.recycle()'將信號,即分配的內存不再使用和'了'相關的數據可以返回到內存池立即而不是等待垃圾收集。作爲回答[這裏](http://stackoverflow.com/questions/7252839/what-is-the-use-of-recycle-method-in-typedarray) – Prof 2017-03-04 23:44:15

0

,彷彿你正試圖設置使用資源的myDialog的圖標,這似乎解決方案,並試圖通過R.style但你的其他代碼來訪問它段引導我相信你有資源位於R.drawable

考慮到這一點,你應該能夠得到你想要的效果與myDialog.setIcon(R.drawable.myicon);