Android中“@ id /”和“@ + id /”的区别

@id/@+id/之间的区别是什么?

@+id/加号符号+指示创build一个新的资源名称并添加到R.java文件,但@id/ ? 从ID的文档:当引用一个Android资源ID时,你不需要加号,但必须添加android包名称空间,如下所示:

 android:id="@android:id/list" 

但是在Eclipse下面的图片中并没有提供任何types的@android:id/

显示@ / id和@ + / id建议的图像

@id/@android:id/相同?

您可以使用@android:id/..来引用已经在Android系统中定义的Android resources ,同时访问您在项目中定义/创build的资源,您可以使用@id/..

更多信息

根据你在聊天中的说明,你说你有这样的问题:

如果我们使用android:id="@id/layout_item_id"它不起作用。 相反, @+id/作品,这里有什么不同? 这是我原来的问题。

那么,这取决于上下文,当你使用android:id的XML属性,那么你指定一个新的id,并指示分析器(或称之为构build器)在R.java创build一个新的条目R.java ,因此你必须包含一个+号。

而在其他情况下,像android:layout_below="@id/myTextView" ,你指的是一个已经创build的id,所以parsing器将它链接到R.java已经创build的id。

更多信息再次

正如你在聊天中所说的那样,注意android:layout_below="@id/myTextView"不会识别一个id为myTextView的元素,如果它写在你使用的元素之后的话。

+符号是将ID添加到资源ID列表的捷径。 否则,你需要把它们放在一个像这样的xml文件中

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

有时候你会在布局文件中看到引用,如:

<listview id="@+id/android:list">

<listview id="@android:id/list">

有什么不同?

..我很高兴你问☺

@+id/foo表示您正在应用程序的名称空间中创build一个名为foo的id。 你可以使用@id/foo来引用它。 @android:id/foo表示您指的是在android命名空间中定义的一个id。

“+”表示如果该符号不存在,则创build该符号。 您在引用android:symbols时不需要它(不应该使用它),因为这些已经由平台为您定义,您无法在该名称空间中创build自己的名称空间。

这个命名空间是框架的命名空间。 例如,你需要使用@android:id/list因为这个框架期望find的id ..(该框架只知道android命名空间中的id。)

完全从这个源复制

简而言之

 android:id="@+id/my_button" 

+ ID加号指示android在资源中添加或创build一个新的ID。

 android:layout_below="@id/my_button" 

它只是帮助引用已经生成的ID ..

只有当您第一次定义资源ID时,才需要资源types前的加号( + )。 编译应用程序时,SDK工具使用ID名称在项目的R.java文件中创build一个引用EditText元素的新资源ID。 使用这种方法声明资源ID时,对ID的其他引用不需要加号。 只有在指定新的资源ID而不需要string或布局等具体资源时,才需要使用加号。 有关资源对象的更多信息,请参阅边框。

来自: https : //developer.android.com/training/basics/firstapp/building-ui.html

Eclipse有一个错误,有时如果你只是创build了一个新的@+id/.. ,它将不会立即添加到R.java文件中,即使在清理完成项目之后。 解决scheme是重新启动Eclipse。

这个我认为应该尽快解决,因为它可能(和从经验中)混淆了一些开发者认为他们的语法有问题,并且试图debugging它,即使没有真正的debugging。

@ id /和@android:id /是不一样的。

@ id /引用您的应用程序中的ID,@android:id /引用Android平台中的项目。

Eclipse是错误的。

从开发者指南 :

 android:id="@+id/my_button" 

string开头的at符号( @ )表示XMLparsing器应parsing并展开IDstring的其余部分,并将其标识为ID资源。 加号( + )表示这是一个新的资源名称,必须创build并添加到我们的资源(在R.java文件中)。 Android框架提供了许多其他ID资源。 引用Android资源ID时,不需要加号,但必须添加android包名称空间,如下所示:

android:id="@android:id/empty"

Android使用一些称为资源的文件,其中存储XML文件的值。

现在,当您使用@ id /作为XML对象时,它试图引用已经在值文件中注册的id。 另一方面,当你使用@ + id /时,它会在值文件中注册一个新的id,正如'+'符号所暗示的那样。

希望这可以帮助 :)。

对于ID值,通常应该使用以下语法forms:“@ + id / name”。 加号+表示这是一个新的资源ID,如果它不存在,aapt工具将在R.java类中创build一个新的资源整数。 例如:

 <TextView android:id="@+id/nameTextbox"/> 

nameTextbox名称现在是附加到此元素的资源ID。 然后,您可以引用在Java中与ID关联的TextView:

 findViewById(R.id.nameTextbox); 

这段代码返回TextView对象。

但是,如果您已经定义了一个ID资源(并且它尚未使用),那么您可以通过排除android:id值中的加号来将该ID应用于View元素。

来源: https //developer.android.com/guide/topics/resources/layout-resource.html#idvalue

如果视图项执行相同的操作,则可以对任何布局中的每个条目使用@ + id,因为在编译多个@ + id / foo时,R.java文件只创build一个枚举。 所以,例如,如果我在每个页面上执行相同的操作有一个保存button,我在每个布局中使用android:id =“@ + id / button_save”。 R.java文件只有一个button_save条目。

Android中“@ + id /”和“@ id /”之间的区别

第一个用于创build特定UI组件的ID,另一个用于引用特定组件