这是我的故事:
我有一个自定义ViewGroup,我希望使用预定义的样式从代码创建,到目前为止,我的方法是从style.xml元素创建一个AttributeSet对象,如此(警告,提防前面的复制粘贴代码) ):
XmlPullParser parser = getResources().getXml(R.style.my_stylez);
AttributeSet attributes = Xml.asAttributeSet(parser);
但是当这样做时,我得到一些疯狂的错误: “..android.content.res.Resources $ NotFoundException:资源ID#0x7f090002类型#0x12无效”
我知道我可能会遗漏一些非常明显的东西(或者我?),如果你们中的任何一个人能指出我正确的方向,我将不胜感激。
由于
答案 0 :(得分:7)
您需要从XML文件的资源标识符开始,最好是在res / xml中。然后,您可以通过首先创建一个XmlPullParser来获取AttributeSet:
Resources res = context.getResources();
XmlPullParser parser = res.getXml(R.xml.some_xml_file);
// Seek to the first tag.
int type = 0;
while (type != XmlPullParser.END_DOCUMENT && type != XmlPullParser.START_TAG) {
type = parser.next();
}
// Wrap as an attribute set.
AttributeSet attrs = Xml.asAttributeSet(parser);
您可以在AOSP的可绘制CTS测试中找到相关示例。
答案 1 :(得分:0)
看起来您的XML(R.style.my_stylez)不存在,或者您的R文件已过时。
答案 2 :(得分:0)
每当你对res目录添加新内容时,最好清理和构建项目。但自从ADT 15以来,这并不总是有效。您有时需要更进一步,删除bin目录以及gen目录。
在adt重新创建这两个目录之后,尝试再次运行clean。
答案 3 :(得分:0)
从环顾四周来看,这似乎是不可能的。抱歉。我真的希望这是可能的......
答案 4 :(得分:0)
getXml方法将从res / xml读取,而不是从res / values读取,我认为这个想法是你使用其他一种方法来获取数据,例如
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyCustomTheme);
然后从TypedArray中获取值:
thingColor = a.getColor(R.styleale.myCustomColor, res.getColor(R.color.myDefaultColor));
这适用于样式,但我的问题是首先从XML获取AttributeSet attrs作为覆盖,并允许人们在运行时指定他们想要的XML文件,将其扩展为AttributeSet并传递给它
当我得到第二部分的答案时,我会回复,但代码示例应解决