可能重复:
What is different between @+id/android:list and @id/android:list ??
@id/..
and @+id/..
之间有什么区别?我不是指两者之间的区别
@android:id/..
和@id/..
代码示例:
<Button
android:id ="@id/add_button"
/>
<Button
android:id ="@+id/remove_button"
/>
上述两个id
定义之间有什么区别?
答案 0 :(得分:39)
您必须在XML文件中第一次出现ID时使用@+
表示法。第二次以及随后的时间你可以 - 而且应该 - 放弃+
标志。这有助于捕捉拼写错误。
例如,假设您有RelativeLayout
。您TextView
为RelativeLayout
的{{1}}中有android:id
。稍后在布局XML文件中,您希望引用另一个@+id/label
用于定位目的(例如,TextView
)。
如果您输入android:layout_below
(请注意拼写错误),在编译时,这将被视为正常。但是,在运行时,事情将无法正常工作,从小部件被错误定位到彻底崩溃,具体取决于Android版本。
如果您输入android:layout_below="@+id/labbel"
(请注意拼写和缺少的android:layout_below="@id/labbel"
符号),那么您将收到编译错误。
<强>更新强>
由于我第一次不够清楚,显然,让我们再试一次。
+
在上方,您会看到<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="URL:"
android:layout_alignBaseline="@+id/entry"
android:layout_alignParentLeft="true"/>
<EditText
android:id="@id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/label"
android:layout_alignParentTop="true"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignRight="@id/entry"
android:text="OK" />
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok"
android:text="Cancel" />
</RelativeLayout>
。您会注意到每个ID的第一次出现都会得到RelativeLayout
符号。每个ID的第二次及以后出现都不会得到+
符号。
您可以对所有这些使用+
符号,但如果您输入错误,编译器将无法解决问题。
+
符号有效地表明“分配新ID”。没有+
符号状态“使用先前分配的ID,或者如果没有这样的ID则在编译时失败”。
答案 1 :(得分:6)
在Android布局资源XML源文件中:
"@+id/anyId"
:添加新ID
"@id/anyId"
:引用现有ID
只有在使用"@id/anyId"
R.java
课程时,才应使用"@+id/anyId"
答案 2 :(得分:3)
对于ID值,通常应该这样 使用以下语法形式:“@ + id / name”。该 加号,+,表示这是 一个新的资源ID和aapt工具 将在中创建一个新的资源整数 R.java类,如果没有 已经存在。
因此+
用于分配新ID,在使用现有ID时也可以使用,但在那里没有必要。
答案 3 :(得分:3)
第二个:
<Button android:id ="@+id/remove_button" />
定义了一个新的id。当您想要引用布局元素时,您将使用第一个。例如,在相对布局中:
android:layout_below="@id/remove_button"