正在解析来自 xml 的 android 资源

Parsing android resources from xml

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

我需要 XML 文件中的一些布局 ID 和颜色 ID。我在读取字符串值时没有问题,但我不知道如何将 XML 布局引用转换为布局 ID?感谢您的帮助!!

我的 XML 文件看起来像这样:

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

我的解析代码就是这样工作的。 color/layout 的解析不起作用:

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

试试这个:

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将return一个引用的资源id,存储在对应的值中。