如何获取当前使用的 Layout(s) 文件名的名称?例如,它可能是 res/layout/main.xml 或类似的东西。此外,需要此信息的代码不是包含此布局的应用程序的一部分,它是一种测试代码。
问问题
55 次
2 回答
0
我假设,您可以进行反思和大量迭代。
首先,您需要 R.layout 类中的所有静态数据 - 然后获取它们的值并将它们与 进行比较,View.getId()
并在最后一步中检索字段名称。
但是:该名称将仅包含布局文件名称(在您的示例中main
)而不是它的完整路径,即使您可能有相同名称的重复布局,例如横向/纵向模式等
我从来没有尝试过这样的事情,我不确定这是否可行,因为我不知道你的测试环境是否可以无错误地访问你的 R 文件,但这是你可以去的方式
编辑:只需添加一些应该完成工作的示例代码,在应用程序内工作 - 正如我所说我不确定你的框架和你访问 r 的方式
R.layout layout = new R.layout();
Map<Integer, String> id2name = new HashMap<Integer, String>();
for (Field f : layout.getClass().getDeclaredFields()) {
try {
id2name.put(f.getInt(layout), f.getName());
Log.i("Layout", f.getInt(layout) + "," + f.getName());
}
catch (IllegalArgumentException e) {
//oops
Log.e("Layout", "", e);
}
catch (IllegalAccessException e) {
//oops
Log.e("Layout", "", e);
}
}
for (Entry<Integer, String> e:id2name.entrySet()) {
if (findViewById(e.getKey()) != null) {
Log.i("Layout:", "found: " + e.getValue() + ";" + e.getKey());
}else {
Log.i("Layout:", "not found: " + e.getValue()+ ";" + e.getKey());
}
}
请注意,除非完成布局,否则将找不到视图(如果您提前调用,则 findViewById() 为空)
当然,您可以反过来并通过检查布局是否是 ViewGroup 的实例并遍历其子视图并将每个 id 与地图中的 id 进行比较来搜索视图树
于 2013-08-20T17:24:17.320 回答
0
你没有。在内部,Android 不会通过文件名来引用它们,而是通过 id- 整数来引用它们。您可以在生成的 R 文件中看到它使用的整数。并且该信息不会被存储,它会膨胀正确的文件然后忘记它。
于 2013-08-20T15:53:53.867 回答