android中的@ id /和@ + id /有什么区别?

时间:2011-04-20 13:49:08

标签: android

  

可能重复:
  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定义之间有什么区别?

4 个答案:

答案 0 :(得分:39)

您必须在XML文件中第一次出现ID时使用@+表示法。第二次以及随后的时间你可以 - 而且应该 - 放弃+标志。这有助于捕捉拼写错误。

例如,假设您有RelativeLayout。您TextViewRelativeLayout的{​​{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"

已将“anyId”添加到R.java课程时,才应使用"@+id/anyId"

答案 2 :(得分:3)

来自Android Guide

  

对于ID值,通常应该这样   使用以下语法形式:“@ + id / name”。该   加号,+,表示这是   一个新的资源ID和aapt工具   将在中创建一个新的资源整数   R.java类,如果没有   已经存在。

因此+用于分配新ID,在使用现有ID时也可以使用,但在那里没有必要。

答案 3 :(得分:3)

第二个:

<Button android:id ="@+id/remove_button" />

定义了一个新的id。当您想要引用布局元素时,您将使用第一个。例如,在相对布局中:

android:layout_below="@id/remove_button"