如何从属性引用中检索drawable

时间:2013-03-11 13:17:24

标签: android user-interface

我在我的应用程序中定义了主题和样式。图标(可绘制)使用样式文件中的引用定义为

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

和样式

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

我需要以编程方式检索drawable以在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或null: - /

我怎么能这样做?

3 个答案:

答案 0 :(得分:14)

我找到了解决方案 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);

答案 1 :(得分:5)

Kotlin解决方案:

val typedValue = TypedValue()
context.theme.resolveAttribute(R.attr.yourAttr, typedValue, true)
val imageResId = typedValue.resourceId
val drawable = ContextCompat.getDrawable(contex, imageResId) ?: throw IllegalArgumentException("Cannot load drawable $imageResId")

答案 2 :(得分:0)

您似乎正在尝试使用资源设置myDialog的图标并尝试通过R.style访问它,但是您的其他代码段让我相信您拥有位于R.drawable中的资源

考虑到这一点,你应该能够通过myDialog.setIcon(R.drawable.myicon)获得你想要的效果;