Android 什么时候应该使用“@+”;id`而不是'@id`?

Android 什么时候应该使用“@+”;id`而不是'@id`?,android,android-layout,Android,Android Layout,我在一个中有一堆视图,我将该包含在一个相对视图中。我试图引用包含的视图s的ID作为我的其他视图s的锚,但Eclipse抱怨这些ID没有解析。当我第一次引用它们时,我使用@+id而不是@id找到了一个解决方法,而不是在我实际定义它们引用的对象时。我已经在样式中定义了这两个ID,并且在声明它们的包含的中定义了它们,所以如果我一直重复ID的定义,感觉效率有点低 这是正确的做法吗?我假设它是坏的,因为“+”是另一个初始化。我目前的假设是,当你第一次使用id时,你应该使用@+id,而不是当你初始化id将要

我在一个
中有一堆
视图
,我将该
包含在一个
相对视图中。我试图引用包含的
视图
s的ID作为我的其他
视图
s的锚,但Eclipse抱怨这些ID没有解析。当我第一次引用它们时,我使用
@+id
而不是
@id
找到了一个解决方法,而不是在我实际定义它们引用的对象时。我已经在
样式中定义了这两个
ID
,并且在声明它们的包含的
中定义了它们,所以如果我一直重复ID的定义,感觉效率有点低

这是正确的做法吗?我假设它是坏的,因为“+”是另一个初始化。我目前的假设是,当你第一次使用id时,你应该使用
@+id
,而不是当你初始化id将要表示的对象时,有点像
C/C++
以及在使用函数的实际代码之前,他们如何要求至少在行中有一个函数原型


我的另一个问题是,当您使用Eclipse的基于GUI的UI构建器时,我注意到他们总是使用
@+id
而不是
@id
。这是可以接受的,因为我觉得它效率低下;这就好像应用程序将花费更多的时间来确定ID是否已在
R.ID

中声明,使用
@+ID
格式告诉Android资产编译器为元素分配ID,它实际上不是ID本身。因此,如果我使用
@+id/myNewId
,资产编译器将创建一个名为
myNewId
的新id,并为其提供一个数字。实际数字可以通过代码
R.id.myNewId
访问

如果使用
@id
,编译器将查找
R.id.id
。您可以在XML文件中定义自己的id,如下所述:。您可以在
res/values/[your\u filename].xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <item
        type="id"
        name="id_name" />
</resources>

然后参考
@id\u name
,例如

您还可以使用Android命名空间中定义的Id:
@Android:Id/empty

Android文档对此做了很好的解释:


这里还有一些进一步的讨论:

等等,这样我就可以创建一个名为
id
的xml文件,初始化那里需要的所有id,然后再也不必使用
@+id
?我已经编辑来解释如何使用,但没有理由这样做,除非您想确保为两个不同的控件使用相同的id(在同一视图中,您永远不希望执行此操作)。我想@+id是在早期的开发人员非常恼火必须在id文件中添加每个id之后添加的一种约定,因为他们想在视图中添加一个新的小部件。别担心,我阅读了文档;我只是想确认一下,但感谢您付出的额外努力!我的问题是,当我使用
mer时,eclipse有时会出错ge
包含
标记。不确定是
adb
的错误还是android的资源xml解析器的错误。这让我想知道什么时候应该使用+。