在 Android 中,我可以在不同的布局中使用相同的 id 吗?

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

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

39815 次浏览

Short answer: Yes, you can.

Long answer: You can do this because whenever you use findViewById() to get a reference to a part of your layout, the method only looks for that view in the currently inflated layout. So even if you have another view with the same ID in another layout, Android will not look for it there.

It is recommended that you use different ids for different layouts. On the long run, when you will have a lot of layouts and therefor a lot of ids it will get very complicated to differentiate them.

I usually name my ids like this: layoutName_elementId.

It works for me to easily find the id I'm looking for, especially when using autocomplete (I know on what layout I'm working, but I don't really know the id; in this case, with my naming strategy, I only type the layout name and it brings on all the ids of that layout).

More information on layouts and ids can be found here.

Happy coding,

According to developer API guides:

An ID need not be unique throughout the entire tree, but it should be unique within the part of the tree you are searching (which may often be the entire tree, so it's best to be completely unique when possible).

So the short answer is that it's not mandatory but it's a good practice to avoid possible conflicts.

Not recommended, because if in future you will need to refactor the view id, Android studio will refactor it in all XML files and classes and you will get into trouble.

But there are also some cases when you do need to use same id for example if you have some abstract and you reuse multiple layouts.

In case you have multiple views with same id's in your project and you need to refactor, do it manually, don't use build in IDE function, change the id in the target view inside XML layout then fix the red error inside layout.

Update:

Currently Android studio support refactoring with "refactor in current file only" option.

Update:ViewBinding

You can get casting exception if you have nested layouts (include tag) with view id's that clashed with id's in his hierarchy.