Android中“@ id /”和“@ + id /”的区别
@id/
和@+id/
之间的区别是什么?
在@+id/
加号符号+指示创build一个新的资源名称并添加到R.java
文件,但@id/
? 从ID
的文档:当引用一个Android资源ID时,你不需要加号,但必须添加android包名称空间,如下所示:
android:id="@android:id/list"
但是在Eclipse下面的图片中并没有提供任何types的@android: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,另一个用于引用特定组件