从xml解析android资源

时间:2015-06-13 19:48:53

标签: java android xml parsing xml-parsing

我在解析Android应用程序的XML文件时遇到了一些问题。

我需要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 个答案:

答案 0 :(得分: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,存储在相应的值中。