正在解析来自 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,存储在对应的值中。
我在为我的 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,存储在对应的值中。