确定两个资源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资源标识符是指。
答
我会回答我的问题:似乎没有直接的方法来告诉布局的根视图,除了挖掘并获取布局的原始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();
}
也许'Resources.getResourceName()'帮助 –
@Jiang YD这只会返回some_layout或another_resource_id取决于所使用的渣油。 –