将Android中的XML形状设置为可编程绘制。

26

你好,我有一个名为myshape.xml的drawable文件,在里面包含了<shape>标签,但我无法给这些形状设置android:id。

在我的代码中,我想要将一个视图的背景设置为这个文件,使用以下代码:

catAll.setBackgroundDrawable(getResources().getDrawable(R.id......???));

其中myshape.xml没有在R文件中出现,因为它没有id。而且我也不能为对象设置id。

在我的XML中,我通过简单地输入可绘制资源名称来设置形状。但是我需要以编程方式实现这一点。

2个回答

47

您不需要自己获取可绘制对象。请改用以下方法:

catAll.setBackgroundResource(R.drawable.myshape);

供日后参考,如果您确实希望获取可绘制对象,请记住可绘制对象存储在R.drawable命名空间中。因此,您的代码将变为:

getResources().getDrawable(R.drawable.myshape);

这类似于你在XML中所做的事情:

@drawable/myshape

替代

@id/myshape

1
指出“R.drawable”命名空间是关键,感谢K-ballo! - Melinda Green
getDrawable(id)方法已被弃用,请使用新的方法。 - Rahul Raina

0

这个问题非常古老,但谷歌的第一个搜索结果引用了这个线程。

因此,getDrawable(id)已经被弃用。

简短的解决方案(Kotlin)

yourView.background = ContextCompat.getDrawable(context, R.drawable.your_ressource_id)

更多信息,请阅读此文:https://dev59.com/NV4b5IYBdhLWcg3wfx1I#29146895


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接