99

我是 Android 开发的新手。对图像和TextViews不同的LayoutXML 文件使用相同的 ID 是否可以?

当eclipse为我自动列出它们时,它会列出项目中的所有布局变量,所以它会发生冲突吗?到目前为止,我还没有注意到在不同布局中使用相同的 ID 有任何问题,但从长远来看,我很担心。

4

4 回答 4

144

简短的回答:是的,你可以。

长答案:您可以这样做,因为每当您使用 findViewById() 来获取对布局的一部分的引用时,该方法只会在当前膨胀的布局中查找该视图。因此,即使您在另一个布局中有另一个具有相同 ID 的视图,Android 也不会在那里寻找它。

于 2012-09-08T19:16:53.070 回答
99

建议您为不同的布局使用不同的 id。从长远来看,当你有很多布局并因此有很多 id 时,区分它们会变得非常复杂。

我通常这样命名我的 id layoutName_elementId:.

它可以让我轻松找到我正在寻找的 id,尤其是在使用自动完成时(我知道我正在使用什么布局,但我并不真正知道 id;在这种情况下,根据我的命名策略,我只需输入布局名称,它就会显示该布局的所有 id)。

有关布局和 ID 的更多信息,请参见此处

快乐编码,

于 2012-09-08T19:20:57.610 回答
22

根据开发人员 API 指南:

ID 不必在整个树中是唯一的,但它应该在您正在搜索的树的一部分中是唯一的(这通常可能是整棵树,因此最好尽可能完全唯一)。

所以简短的回答是它不是强制性的,但它是避免可能发生的冲突的好习惯。

于 2016-07-07T15:45:58.320 回答
17

不推荐,因为如果将来你需要重构view id,Android Studio 会在所有XML文件和类中重构它,你会遇到麻烦。

但是在某些情况下,您确实需要使用相同id的,例如,如果您有一些抽象并且您重用多个布局。

如果您的项目中有多个views相同id's的,并且您需要重构,请手动进行,不要使用 IDE 中的构建功能,更改布局id内的目标视图,XML然后修复布局内的红色错误。

更新:

目前 Android Studio 支持使用“仅在当前文件中重构”选项进行重构。

更新:视图绑定

如果您的嵌套布局(包括标签)的视图 id 与他的层次结构中的 id 冲突,则可能会出现强制转换异常。

于 2018-04-18T17:36:25.763 回答