如何从style.xml创建AttributeSet?

时间:2010-12-10 15:06:25

标签: android android-widget android-layout

这是我的故事:

我有一个自定义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无效”

我知道我可能会遗漏一些非常明显的东西(或者我?),如果你们中的任何一个人能指出我正确的方向,我将不胜感激。

由于

5 个答案:

答案 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并传递给它

当我得到第二部分的答案时,我会回复,但代码示例应解决