2010-12-10 43 views
16

這裏是我的故事:如何從style.xml創建一個AttributeSet?

我得到了我想要使用預定義的風格從代碼中創建一個自定義的ViewGroup,我的做法至今已創造從style.xml元素的AttributeSet中的對象,像這樣(警告,當心超前的複製粘貼代碼):

XmlPullParser parser = getResources().getXml(R.style.my_stylez); 
    AttributeSet attributes = Xml.asAttributeSet(parser); 

但是,當這樣做,我得到一些瘋狂的錯誤: 」 ..android.content.res.Resources $ NotFoundException:資源ID#0x7f090002型#0×12是無效的「

我知道我可能錯過了一些非常明顯的東西(或者是我呢?),如果你們中的任何一位能指出我朝着正確的方向,我將不勝感激。

感謝

+0

畢竟你做到了嗎? – 2012-12-11 17:53:26

+0

3.5年後的任何解決方案? – Supuhstar 2014-07-08 18:49:06

回答

0

看起來你的XML(R.style.my_stylez)不存在,或者您的R檔是過時的。

0

每當你對res目錄進行新增加時,清理和構建項目是一個不錯的主意。但自ADT 15以來,這並不總是奏效。你有時需要更進一步,刪除bin目錄以及gen目錄。

在adt重新創建這兩個目錄後,請嘗試再次運行清理。

0

從環顧四周看來,這似乎很明顯,這是不可能的。抱歉。我真的希望這是可能的...

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

這適用於styleables,但是我的問題越來越從XML AttributeSet中的ATTRS首先作爲替代來使用,並允許人們要在運行時指定他們想要的XML文件,請將其充滿int一個AttributeSet並傳遞它。

我會後回來時,我對第二部分的答案,但代碼示例應解決

+0

您正在尋找Xml.asAttributeSet(context.getResources()。getXml(R.xml.my_xml_file))。以AOSP中的一些可繪製的CTS測試爲例。 – alanv 2014-07-13 23:57:43

5

你需要開始與一個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測試這方面的例子。

+0

感謝您的回答!很高興看到曾經不可能獲得解決方案的東西。 :3 – Supuhstar 2014-07-14 21:45:18

+0

除了正確設置xml文件外: https://stackoverflow.com/questions/12508260/how-to-properly-write-xml-for-attributeset – Tobliug 2018-02-15 13:13:47