@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/
一样吗?
您指的Android resources
是已经在 Android 系统中定义的,@android:id/..
同时访问您在项目中定义/创建的资源,您使用@id/..
更多信息
根据您在聊天中的说明,您说您遇到了这样的问题:
如果我们使用
android:id="@id/layout_item_id"
它是行不通的。相反@+id/
有效,那么这里有什么区别?那是我最初的问题。
好吧,这取决于上下文,当您使用 的 XML 属性时android:id
,您将指定一个新的 id,并指示解析器(或称其为构建器)在 中创建一个新条目R.java
,因此您必须包括一个+
标志。
而在另一种情况下,例如android:layout_below="@id/myTextView"
,您指的是已经创建的 id,因此解析器将其链接到 中已创建的 id R.java
。
再次提供更多信息
正如您在聊天中所说,请注意,如果它写在您使用它的元素之后,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>
简而言之
android:id="@+id/my_button"
+id 加号告诉 android 在 Resources 中添加或创建一个新的 id。
尽管
android:layout_below="@id/my_button"
它只是帮助参考已经生成的 id ..
+
仅当您第一次定义资源 ID 时,才需要资源类型前的加号 ( )。编译应用程序时,SDK 工具使用 ID 名称在项目R.java
文件中创建一个新的资源 ID,该 ID 引用该EditText
元素。以这种方式声明一次资源 ID 后,对该 ID 的其他引用不需要加号。仅在指定新资源 ID 时才需要使用加号,而对于字符串或布局等具体资源则不需要。有关资源对象的更多信息,请参见边栏。
来自:https ://developer.android.com/training/basics/firstapp/building-ui.html
Its very simple:
"@+..." - create new
"@..." - link on existing
Source: 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"
@id/
和@android:id/
不一样。
@id/
在您的应用程序中引用 ID,@android:id/
在 Android 平台中引用一个项目。
日食是错误的。
Eclipse 存在一个错误,有时如果您刚刚创建了一个新@+id/..
的 ,即使在干净构建项目之后,它也不会立即添加到 R.java 文件中。解决方案是重新启动 Eclipse。
我认为应该尽快解决这个问题,因为它可能(并且根据经验,会)让一些开发人员误以为他们的语法有问题,并尝试调试它,即使真的没有什么可调试的。
Android 使用一些称为资源的文件,其中存储 XML 文件的值。
现在,当您将 @id/ 用于 XML 对象时,它会尝试引用已在值文件中注册的 id。另一方面,当您使用 @+id/ 时,它会在值文件中注册一个新的 id,正如“+”符号所暗示的那样。
希望这可以帮助 :)。
Difference between @+id
and @id
is:
@+id
is used to create an id for a view in R.java
file.@id
is used to refer the id created for the view in R.java file.We use @+id
with android:id=""
, but what if the id is not created and we are referring it before getting created(Forward Referencing).
In that case, we have use @+id
to create id and while defining the view we have to refer it.
Please refer the below code:
<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>
In the above code,id for Spinner @+id/spinner
is created in other view and while defining the spinner we are referring the id created above.
So, we have to create the id if we are using the view before the view has been created.
如果视图项执行相同的操作,您可以在任何布局中使用for each entry,因为在多个文件的@+id
编译期间只创建一个枚举。例如,如果我在每个页面上都有一个执行相同操作的保存按钮,我会在每个布局中使用。R.java 文件只有一个 button_save 条目。@+id/foo
R.java
android:id="@+id/button_save"