XmlResourceParser returns Lollipop 属性的不同计数
XmlResourceParser returns diffrent count of attributes on Lollipop
我正在玩 Kitkat 或 Gingerbread 等旧平台上的新矢量 xml 可绘制对象。我有这样一张图片:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="300dp"
android:height="300dp"
android:viewportWidth="300"
android:viewportHeight="300">
<group>
<path
android:fillColor="@color/primary"
android:pathData="@string/svg_path_background" />
<path
android:fillColor="#fff"
android:pathData="@string/svg_path1" />
<path
android:fillColor="@color/primary"
android:pathData="@string/svg_path2" />
</group>
</vector>
确切的值并不重要,它在 Lollipop 上运行良好。但是,我现在尝试读取此 xml 文件(来自 drawable 目录)。这工作正常,除了在每个标签中都缺少一个属性。我不知道为什么会这样:
public static void load(Resources res, int drawable) {
XmlResourceParser vector = res.getXml(drawable);
int type = -1;
StringBuilder xml = new StringBuilder();
while(type != XmlResourceParser.END_DOCUMENT) {
try {
type = vector.getEventType();
switch(type) {
case XmlResourceParser.START_TAG:
xml.append("<");
xml.append(vector.getName());
for(int i = 0; i < vector.getAttributeCount(); i++) {
xml.append(" ");
xml.append(vector.getAttributeName(i));
xml.append("=\"");
xml.append(vector.getAttributeValue(i));
xml.append("\"");
}
xml.append(">\n");
break;
case XmlResourceParser.END_TAG:
xml.append("</");
xml.append(vector.getName());
xml.append(">\n");
break;
}
vector.next();
} catch(XmlPullParserException | IOException e) {
e.printStackTrace();
}
}
Log.d("XML-Test", xml.toString());
vector.close();
}
上面这段代码的输出在 Kitkat 和 Gingerbread 上是这样的:
<vector height="300.0dip" width="300.0dip" viewportHeight="300.0">
<group>
<path pathData="@2131624234">
</path>
<path pathData="@2131624248">
</path>
<path pathData="@2131624249">
</path>
</group>
</vector>
Lollipop 上的正确输出:
<vector height="300.0dip" width="300.0dip" viewportWidth="300.0" viewportHeight="300.0">
<group>
<path fillColor="@2131296323" pathData="@2131624234">
</path>
<path fillColor="#ffffffff" pathData="@2131624248">
</path>
<path fillColor="@2131296323" pathData="@2131624249">
</path>
</group>
</vector>
这是否可能是构建系统的错误?我不明白不同的输出是如何可能的。我正在使用 AS 1.0.2 和 buildToolsVersion 21.1.2
这似乎是 Android 构建工具检查的错误 this bug report。
我正在玩 Kitkat 或 Gingerbread 等旧平台上的新矢量 xml 可绘制对象。我有这样一张图片:
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="300dp"
android:height="300dp"
android:viewportWidth="300"
android:viewportHeight="300">
<group>
<path
android:fillColor="@color/primary"
android:pathData="@string/svg_path_background" />
<path
android:fillColor="#fff"
android:pathData="@string/svg_path1" />
<path
android:fillColor="@color/primary"
android:pathData="@string/svg_path2" />
</group>
</vector>
确切的值并不重要,它在 Lollipop 上运行良好。但是,我现在尝试读取此 xml 文件(来自 drawable 目录)。这工作正常,除了在每个标签中都缺少一个属性。我不知道为什么会这样:
public static void load(Resources res, int drawable) {
XmlResourceParser vector = res.getXml(drawable);
int type = -1;
StringBuilder xml = new StringBuilder();
while(type != XmlResourceParser.END_DOCUMENT) {
try {
type = vector.getEventType();
switch(type) {
case XmlResourceParser.START_TAG:
xml.append("<");
xml.append(vector.getName());
for(int i = 0; i < vector.getAttributeCount(); i++) {
xml.append(" ");
xml.append(vector.getAttributeName(i));
xml.append("=\"");
xml.append(vector.getAttributeValue(i));
xml.append("\"");
}
xml.append(">\n");
break;
case XmlResourceParser.END_TAG:
xml.append("</");
xml.append(vector.getName());
xml.append(">\n");
break;
}
vector.next();
} catch(XmlPullParserException | IOException e) {
e.printStackTrace();
}
}
Log.d("XML-Test", xml.toString());
vector.close();
}
上面这段代码的输出在 Kitkat 和 Gingerbread 上是这样的:
<vector height="300.0dip" width="300.0dip" viewportHeight="300.0">
<group>
<path pathData="@2131624234">
</path>
<path pathData="@2131624248">
</path>
<path pathData="@2131624249">
</path>
</group>
</vector>
Lollipop 上的正确输出:
<vector height="300.0dip" width="300.0dip" viewportWidth="300.0" viewportHeight="300.0">
<group>
<path fillColor="@2131296323" pathData="@2131624234">
</path>
<path fillColor="#ffffffff" pathData="@2131624248">
</path>
<path fillColor="@2131296323" pathData="@2131624249">
</path>
</group>
</vector>
这是否可能是构建系统的错误?我不明白不同的输出是如何可能的。我正在使用 AS 1.0.2 和 buildToolsVersion 21.1.2
这似乎是 Android 构建工具检查的错误 this bug report。