2016-07-29 8 views
0

Ich habe ein Android-Setup, das eine Ressourcendatei hat, die auf ein einzelnes Layout aus einer Auswahl von zwei verweist.Ermitteln, ob zwei Ressourcen-IDs auf dasselbe Layout zeigen

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<resources> 
    <item name="another_resource_id" type="layout">@layout/some_layout</item> 
</resources> 

oder

<?xml version="1.0" encoding="UTF-8" standalone="no"?> 
<resources> 
    <item name="another_resource_id" type="layout">@layout/some_layout2</item> 
</resources> 

Dies erzeugt die R.layout

public static final class layout { 
    ... 
    public static final int another_resource_id=0x7f030000; 
    public static final int some_layout=0x7f030001; 
    public static final int some_layout2=0x7f030002; 
    ... 
} 

Also das Problem ist, dass aus dem Code Ich möchte sagen können, die das Layout another_resource_id Ressource Bezeichner bezieht sich auf.

+0

vielleicht 'Resources.getResourceName()' helfen –

+0

@Jiang YD Dies wird nur zurückkehren some_layout oder another_resource_id je nach RESID verwendet. –

Antwort

0

Ich werde meine Frage beantworten: Scheint, es gibt keine direkte Möglichkeit, die Root-Ansicht für ein Layout zu erklären, außer zu graben und die ursprüngliche XML für das Layout zu erhalten. Wenn ich die beiden vergleiche, kann ich sagen, ob sie dieselbe Ansicht haben. Ein bisschen weit weg, aber da ist es. Der folgende Code vergleicht nur das Hinzufügen der Resouce-ID für die zugrunde liegenden Elemente. Offensichtlich könnten Sie viel komplexere Logik in.

try { 
     XmlResourceParser xrp = ctx.getResources().getLayout(id); 
     int eventType; 
     xrp.next(); 

     String resourceIds = ""; 
     do { 
      eventType = xrp.nextToken(); 
      if (eventType == XmlPullParser.START_TAG) { 
       int attrs = xrp.getAttributeCount(); 
       if (attrs > 0) { 
        for (int i = 0; i < attrs; i++) { 
         if (xrp.getAttributeName(i).compareTo("id") == 0) { 
          resourceIds += xrp.getAttributeValue(i); 
         } 
        } 
       } 
      } 
     } while (eventType != XmlPullParser.END_DOCUMENT); 

     returnVal = resourceIds.hashCode(); 

    } catch (XmlPullParserException e) { 
      //   e.printStackTrace(); 
    } catch (FileNotFoundException e) { 
      //   e.printStackTrace(); 
    } catch (IOException e) { 
      //  e.printStackTrace(); 
    } catch (Resources.NotFoundException e) { 
      //  e.printStackTrace(); 
    } 
Verwandte Themen