我在View
中有一堆<merge>
,我将<merge>
包含在RelativeLayout
中。我尝试引用包含View
的那些ID作为我的其他View
的锚点,但Eclipse抱怨ID没有解析。当我第一次引用而不是实际定义他们引用的对象时,我使用@+id
而不是@id
找到了解决方法。我已经在ID
和已声明的包含Style
中定义了两个<merge>
,因此如果我不断重复ID的定义,感觉效率会有点低。
这是正确的做法吗?我认为这是不好的,因为'+'是另一个初始化。我目前的假设是,当您第一次使用 ID而不是初始化 ID将要表示的对象时,您应该使用@+id
比如C/C++
以及它们如何在使用该函数的实际代码之前的行中至少需要一个函数原型。
我遇到的另一个问题是当你使用Eclipse的基于GUI的UI构建器时,我注意到它们总是使用@+id
而不是@id
。这是否可以接受,因为它对我来说似乎效率低下;好像应用程序将花费更多时间来确定是否已在R.id
中声明了ID。
答案 0 :(得分:3)
使用@+id
格式告诉Android资源编译器为您的元素分配ID,它实际上不是id本身。因此,如果我使用@+id/myNewId
,资产编译器将创建一个名为myNewId
的新ID,并为其提供一个数字。您可以通过代码R.id.myNewId
访问实际号码。
如果使用@id
,编译器将查找R.id.id
。您可以在XML文件中定义自己的ID,如下所述:http://developer.android.com/guide/topics/resources/more-resources.html#Id。您可以在res/values/[your_filename].xml
中创建自己的文件:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item
type="id"
name="id_name" />
</resources>
然后参考@id_name
,例如
您还可以使用Android命名空间中定义的ID:@android:id/empty
Android文档中详细说明了这一点:http://developer.android.com/guide/topics/ui/declaring-layout.html#id
这里还有一些进一步的讨论:android:id what is the plus sign for