@id/和@+id/有什么区别?
在@+id/中,加号+指示创建一个新的资源名并添加到R.java文件中,但是@id/呢?从ID的文档:当引用一个Android资源ID时,你不需要加号,但必须添加Android包的命名空间,如下所示:
android:id="@android:id/list"
但是在下图中,Eclipse并没有建议使用任何@android:id/。
@id/和@android:id/相同吗?
@id/和@+id/有什么区别?
在@+id/中,加号+指示创建一个新的资源名并添加到R.java文件中,但是@id/呢?从ID的文档:当引用一个Android资源ID时,你不需要加号,但必须添加Android包的命名空间,如下所示:
android:id="@android:id/list"
但是在下图中,Eclipse并没有建议使用任何@android:id/。
@id/和@android:id/相同吗?
当前回答
Eclipse中有一个bug,有时如果你创建了一个新的@+id/..,它不会立即添加到R.java文件中,即使在清理构建项目之后也是如此。解决方案是重新启动Eclipse。
我认为这个问题应该尽快解决,因为它可能(从经验来看,将会)使一些开发人员感到困惑,认为他们的语法有问题,并试图调试它,即使实际上没有什么需要调试的。
其他回答
@+id和@id的区别是:
@+id用于在R.java文件中为视图创建id。 @id用于引用在R.java文件中为视图创建的id。
我们使用@+id与android:id="",但如果id没有创建,我们在创建之前引用它(前向引用)。
在这种情况下,我们使用@+id来创建id,在定义视图时,我们必须引用它。
请参考以下代码:
<RelativeLayout>
<TextView
android:id="@+id/dates"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_toLeftOf="@+id/spinner" />
<Spinner
android:id="@id/spinner"
android:layout_width="96dp"
android:layout_height="wrap_content"
android:layout_below="@id/dates"
android:layout_alignParentRight="true" />
</RelativeLayout>
在上面的代码中,Spinner @+id/ Spinner的id是在另一个视图中创建的,在定义Spinner时,我们引用了上面创建的id。
如果我们在视图被创建之前使用视图,我们必须创建id。
你引用Android资源,这些资源已经在Android系统中定义了,使用@android:id/..当访问您在项目中定义/创建的资源时,使用@id/..
更多信息
根据你在聊天中的澄清,你说你有一个这样的问题:
如果我们使用android:id="@id/layout_item_id",这是行不通的。取而代之的是@+id/,那么这里有什么不同呢?这就是我最初的问题。
好吧,这取决于上下文,当你使用android:id的XML属性时,你指定了一个新的id,并指示解析器(或称其为构建器)在R.java中创建一个新条目,因此你必须包含一个+号。
而在另一种情况下,像android:layout_below="@id/myTextView",你引用的是一个已经创建的id,所以解析器链接到这个已经创建的id在R.java。
更多信息
正如你在聊天中所说,注意android:layout_below="@id/myTextView"不会识别id myTextView的元素,如果它写在你正在使用它的元素之后。
The plus sign (+) before the resource type is needed only when you're defining a resource ID for the first time. When you compile the app, the SDK tools use the ID name to create a new resource ID in your project's R.java file that refers to the EditText element. With the resource ID declared once this way, other references to the ID do not need the plus sign. Using the plus sign is necessary only when specifying a new resource ID and not needed for concrete resources such as strings or layouts. See the sidebox for more information about resource objects.
来自:https://developer.android.com/training/basics/firstapp/building-ui.html
简而言之
android:id="@+id/my_button"
+id加号告诉android在资源中添加或创建一个新的id。
而
android:layout_below="@id/my_button"
它只是帮助引用已经生成的id..
@id/和@android:id/不一样。
@id/引用应用程序中的ID, @android: ID /引用Android平台中的项目。
Eclipse是错误的。