2015-06-13 96 views
0

我在解析Android應用程序的XML文件時遇到了一些問題。從xml解析android資源

我需要一些來自我的XML文件的佈局ID和顏色ID。我在讀取字符串值時沒有問題,但我不知道如何將XML佈局引用轉換爲佈局ID?謝謝你的幫助!!

我的XML文件看起來像這樣:

<program 
    name="ProgramName" 
    color="@color/white" 
    prefLayoutId="@layout/pref" /> 

我的解析代碼工作那樣。色彩的解析/佈局不工作:

XmlPullParser xmlParser = getResources().getXml(R.xml.programlist); 

int event = xmlParser.getEventType(); 
while (event != XmlPullParser.END_DOCUMENT) { 
    String name = xmlParser.getName(); 

    switch (event) { 
     case XmlPullParser.START_TAG: { 
      break; 
     } 
     case XmlPullParser.END_TAG: { 
      if(name.equals("program")) { 
       ProgramInfo pi = new ProgramInfo(); 

       pi.name = xmlParser.getAttributeValue(null, "name"); 

       // HERE I need something like COLOR.Black; 
       pi.color = Integer.valueOf(xmlParser.getAttributeValue(null, "color")); 

       // HERE I need something like R.layout.pref 
       pi.pref = Integer.valueOf(xmlParser.getAttributeValue(null, "prefLayoutId")); 

       result.add(pi); 
     } 
     break; 
    } 
} 

event = xmlParser.next(); 

回答

1

試試這個:

Resources resources = getResources(); 
XmlResourceParser xmlParser = resources.getXml(R.xml.programlist); 

... 

int resourceId = xmlParser.getAttributeResourceValue(null, "color", 0); 
pi.color = (resorceId == 0) ? SOME_DEFAULT_COLOR : resources.getColor(resourceId); 
pi.pref = xmlParser.getAttributeResourceValue(null, "prefLayoutId", 0); 

getAttributeResourceValue會返回一個引用資源ID,存儲在相應的值。

+0

謝謝你的回答。它說「無法解析getAttributeResourceValue(..)」。怎麼了? – EarlyEarl

+0

將xmlParser變量類型從XmlPullParser替換爲XmlResourceParser – AterLux

+0

那麼,存在的問題是我無法獲得AttributeValue「name」。最好使用AttributeSet Xml.asAttributeSet(xmlParser)?但是這兩種方式,您的代碼使用AttributeSet.getAttributeResourceValue不具有像R.layout.pref一樣的行爲。但是區別在哪裏。 – EarlyEarl