1

我在 res/xml/ 文件夹中有一个 XML 索引,我希望它包含其他 xml 文件,这样当我解析 R.xml.index 时,所有文件都合并到一个资源中。

我试图使包含布局技巧适应xml 解析,所以我index.xml看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Index xmlns:android="http://schemas.android.com/apk/res/android">
<Sheet>
    <include xml="o_2sq_m.xml"/>
    <include xml="o_2sq_r.xml"/>
</Sheet>
<Sheet>
    <include xml="o_sq_tr_m.xml"/>
    <include xml="o_sq_tr_r.xml"/>
</Sheet>
</Index>

o_2sq_m.xmlindex.xml 位于同一文件夹中的文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Challenge xmlns:android="http://schemas.android.com/apk/res/android">
<Dimensions maxX="512" maxY="342" />
<Point id="1" x="94" y="101" color="0x00000000" />
...
</Challenge>

但是当我用和XmlPullParser解析 index.xml 时,我在调试器中看到它解析包含标签而不展开它们,即它不访问文件 o_2sq_m.xml 的树

我应该怎么做才能让 android 将文件包含在另一个文件中?

4

2 回答 2

1

如果您没有进行过多的 XML 导入(例如在创建时),您可以使用getResources().getIdentifier(), which 作为这样的索引(删除.xml属性中的)

<Index xmlns:android="http://schemas.android.com/apk/res/android">
<Sheet>
    <include customAttr="o_2sq_m"/> ...
</Sheet>

并假设您要包含的文件名为o_2sq_m.xml,您可以使用以下代码:

switch(tag) {
case "include" :
   String xmlid = xpp.getAttributeValue(null, "customAttr");
   Int xmlIncludedId = res.getIdentifier(xmlid, "xml", getPackageName());
   if(xmlIncludedId != 0) {
     // Here the xmlIncludedId can be used to import other XML files.
     // E.g. getResources().getXml(xmlIncludedId) returns an XmlResourceParser
   }
于 2012-04-11T10:08:48.570 回答
0

The tag is used for layouts not for any xml file. If you use it for layout, the layout inflater will replace it with the corresponding file when needed. In a normal xml it will be considered a tag like any other. I do not think it's possible to do what you want.

于 2012-04-10T20:55:59.013 回答