确定两个资源ID是否指向相同的布局

问题描述:

我有一个Android安装程序,该安装程序具有一个资源文件,该资源文件引用来自两个选项中的单个布局。确定两个资源ID是否指向相同的布局

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

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

这将产生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; 
    ... 
} 

所以,问题是,从代码中,我希望能够告诉它布局another_resource_id资源标识符是指。

+0

也许'Resources.getResourceName()'帮助 –

+0

@Jiang YD这只会返回some_layout或another_resource_id取决于所使用的渣油。 –

我会回答我的问题:似乎没有直接的方法来告诉布局的根视图,除了挖掘并获取布局的原始XML。比较这两个是我如何能够判断他们是否是相同的观点。很长的路,但它是。以下代码仅比较底层元素的资源ID的添加。很显然,你可以把很多更复杂的逻辑。

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(); 
    }