@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/
一样吗?
Answers:
您指的是Android resources
,它们已经在Android系统中定义,并且@android:id/..
在访问您在项目中定义/创建的资源时,您可以使用@id/..
更多信息
根据您在聊天室中所做的澄清,您说自己有这样的问题:
如果我们使用
android:id="@id/layout_item_id"
它不起作用。而是@+id/
可以工作,那么这里有什么区别?那是我最初的问题。
好吧,这取决于上下文,当您使用的XML属性时android:id
,您要指定一个新的ID,并指示解析器(或称其为builder)在中创建新条目R.java
,因此您必须包括一个+
标志。
在另一种情况下 android:layout_below="@id/myTextView"
,您指的是已经创建的ID,因此解析器将此链接到中已创建的ID R.java
。
再次获得更多信息
正如您在聊天中所说的那样,请注意,如果android:layout_below="@id/myTextView"
ID myTextView
是在使用元素的元素之后编写的,则该元素将无法识别。
android:layout_below="@+id/myTextView"
然后使用定义元素本身android:id="@id/myTextView"
。
+
放进去layout_below
也android:id
很好,因为The '+' means to create the symbol if it doesn't already exist
正如Tanmay Mandal在他的好答案(但被低估)中提到的那样。因此,也没有负面的运行时影响(尽管^^可能导致编译时间的增加很小)。
+号是将ID添加到资源ID列表的捷径。否则,您需要将它们放在这样的xml文件中
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_logo" type="id"/>
</resources>
<View android:id="@id/my_logo"/>
如果您没有上面定义的资源文件,那么您需要像做<View android:id="@+id/my_logo"/>
笔记那样做:您只需要做一次+ id因此,如果您在另一个布局文件中执行了<View android:id =“ + id / my_logo” />,则下次您在布局中使用相同的ID时无需添加'+'字符。
res/drawable/
或者res/layout/
或res/values/
,该文件的名称是什么?如果您对此有任何有用的链接,请在此处发布。
有时您会在布局文件中看到引用,例如:
<listview id="@+id/android:list">
和
<listview id="@android:id/list">
有什么不同?
..很高兴你问☺
@+id/foo
表示您正在应用程序的名称空间中创建一个名为foo的ID。您可以使用来引用它@id/foo
。
@android:id/foo
表示您是指在android名称空间中定义的ID。
“ +”表示创建符号(如果尚不存在)。在引用android:符号时,您不需要它(也不应使用它),因为这些符号已由平台为您定义,并且您无论如何都无法在该命名空间中创建自己的符号。
该名称空间是框架的名称空间。例如,您需要使用@android:id/list
该框架,因为它是框架希望找到的ID。(框架仅知道android名称空间中的ID。)
从此源完全复制
简而言之
android:id="@+id/my_button"
+ id加号指示android在“资源”中添加或创建新的ID。
而
android:layout_below="@id/my_button"
它只是帮助引用已经生成的ID。
+
仅当您首次定义资源ID时,才需要在资源类型之前加号()。编译应用程序时,SDK工具使用ID名称在R.java
引用该EditText
元素的项目文件中创建一个新的资源ID 。使用这种方式一次声明资源ID后,对该ID的其他引用就不需要加号了。仅当指定新的资源ID时才需要使用加号,而对于诸如字符串或布局之类的具体资源则不需要使用加号。有关资源对象的更多信息,请参见边箱。
来自:https : //developer.android.com/training/basics/firstapp/building-ui.html
非常简单:
“ @ + ...”-新建
“ @ ...”-现有链接
来源: https ://developer.android.com/guide/topics/resources/layout-resource.html#idvalue
从开发人员指南中:
android:id="@+id/my_button"
@
字符串开头的at-符号()表示XML解析器应解析并扩展ID字符串的其余部分,并将其标识为ID资源。加号(+
)表示这是一个新的资源名称,必须创建该名称并将其添加到我们的资源中(在R.java
文件中)。Android框架提供了许多其他ID资源。引用Android资源ID时,不需要加号,但必须添加android
包名称空间,如下所示:
android:id="@android:id/empty"
Eclipse有一个错误,有时候您只是创建了一个新的 @+id/..
,即使将其编译干净后,也不会立即将其添加到R.java文件中。解决方案是重新启动Eclipse。
我认为应该尽快解决此问题,因为它可能(并且根据经验)会使一些开发人员误以为他们的语法有问题,即使实际上没有什么可调试的,也要尝试对其进行调试。
Android使用一些称为资源的文件,其中存储XML文件的值。
现在,当您对XML对象使用@ id /时,它将尝试引用已在值文件中注册的ID。另一方面,当您使用@ + id /时,它将在“ +”符号所隐含的值文件中注册一个新的ID。
希望这可以帮助 :)。
@id/
而且@android:id/
不一样。
@id/
在您的应用程序中引用ID,@android:id/
引用Android平台中的项目。
Eclipse是错误的。
@id/ referencing ID in your application
但是eclise Error: No resource found that matches the given name (at 'id' with value '@id/my_resource_id')
在我们使用它引用应用程序资源时给出。那么@id/
和之间有什么区别@+id/
?你怎么能说日食是错的?
@id/
仅在情况下显示的那样RelativeLayout
@+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 @+id/spinner
在其他视图中创建并且在定义Spinner时,我们引用的是上面创建的ID。
因此,如果要在创建视图之前使用视图,则必须创建ID。