2013-03-11 27 views
7

Tôi đã xác định chủ đề và kiểu trong ứng dụng của mình. biểu tượng (drawable) được định nghĩa sử dụng tài liệu tham khảo trong tập tin kiểu nhưCách truy xuất drawable từ tham chiếu thuộc tính

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

và phong cách như

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

tôi cần phải lấy drawable lập trình để sử dụng hình ảnh tốt trong một dialogfragment. Nếu tôi làm như

mydialog.setIcon(R.style.myicon); 

tôi nhận được một id bằng 0, vì vậy không có hình ảnh

tôi cố gắng sử dụng một cái gì đó giống như

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

tôi đã cố gắng điều khác nhau như thế nhưng kết quả luôn luôn là 0 hoặc null: -/

Tôi làm cách nào để thực hiện việc này?

Trả lời

11

Tôi tìm thấy giải pháp trên 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

Đừng quên gọi a.recycle –

+0

Đối với bất kỳ ai khác đang thắc mắc: 'a.recycle()' sẽ báo hiệu rằng bộ nhớ được cấp không còn được sử dụng và dữ liệu được liên kết với 'a' có thể được trả về bộ nhớ ngay lập tức thay vì chờ thu gom rác. Như đã trả lời [ở đây] (http://stackoverflow.com/questions/7252839/what-is-the-use-of-recycle-method-in-typedarray) – Prof

0

Có vẻ như bạn đang cố gắng để thiết lập các biểu tượng của myDialog của bạn bằng cách sử dụng tài nguyên và đang cố gắng để truy cập nó thông qua R.style nhưng mã khác của bạn phân khúc dẫn tôi tin rằng bạn có tài nguyên nằm trong R.drawable

Với ý nghĩ đó bạn sẽ có thể nhận được hiệu ứng bạn muốn với myDialog.setIcon (R.drawable.myicon);

Các vấn đề liên quan