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

时间:2016-07-29 02:31:32

标签: android android-layout

我有一个Android设置,其中包含一个资源文件,该文件引用了两个选项中的单个布局。

<?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 资源标识符引用哪种布局。

1 个答案:

答案 0 :(得分:0)

我将回答我的问题:似乎没有直接的方法来告诉根视图的布局除了挖掘并获取布局的原始XML。比较两者是我如何判断它们是否是相同的视图。有点远,但它确实存在。以下代码仅比较了底层元素的resouce 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();
   }