2012-04-10 15 views
1

Ich habe einen XML-Index im Ordner res/xml /, und ich möchte es andere XML-Dateien enthalten, so dass, wenn ich R.xml.index analysieren , alle Dateien werden in einer einzigen Ressource zusammengeführt.Android in Eclipse, Merge/Include verschachtelte XML nicht-Layout-Ressourcen

Ich versuchte, die include layout trick zu XML-Parsing anzupassen, so dass meine index.xml sieht wie folgt aus:

<?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> 

und die Datei o_2sq_m.xml, die im selben Ordner wie index.xml ist, dass wie folgt aussieht:

<?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> 

Aber wenn ich analysieren index.xml mit und XmlPullParser, sehe ich im Debugger, dass es die Tags analysiert umfassen, ohne sie ausgerollt, dh es ist nicht der Baum der Datei zugreift o_2sq_m.xml

Was soll ich tun, damit android die Dateien in einem anderen enthält?

Antwort

1

Wenn Sie tun, nicht zu viel XML-Import (wie bei Erstellungszeit), Sie getResources().getIdentifier(), die für einen Index wie das (entfernen Sie das .xml im Attribut)

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

und gegeben nutzen könnten, dass Ihre Datei enthalten ist o_2sq_m.xml genannt werden, können Sie den folgenden Code verwenden:

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 
    } 
+0

Danke, diese Art der Sache ist, ich suchte. –

0

Das Tag wird für Layouts verwendet, nicht für irgendeine XML-Datei. Wenn Sie es für Layout verwenden, wird der Layout-Inflator es bei Bedarf durch die entsprechende Datei ersetzen. In einem normalen XML wird es als ein Tag wie jeder andere angesehen. Ich glaube nicht, dass es möglich ist, zu tun, was Sie wollen.