Android中的@ id /和@ + id /有什么区别?
可能重复:
What is different between @+id/android:list and @id/android:list ??Android中的@ id /和@ + id /有什么区别?
是什么@id/..
and @+id/..
之间的区别?我不是指差异 @android:id/..
和@id/..
代码示例之间
:
<Button
android:id ="@id/add_button"
/>
<Button
android:id ="@+id/remove_button"
/>
是什么上述两个id
定义之间的区别?
必须在XML文件中使用@+
符号上的ID的第一次出现。第二次和以后的时间,你可以 - 也应该 - - 丢弃+
标志。这将有助于发现错别字。例如,假设您有RelativeLayout
。您在RelativeLayout
中有TextView
,其android:id
为@+id/label
。稍后在布局XML文件中,您希望从另一个参考TextView
进行定位(例如,针对android:layout_below
)。
如果您在android:layout_below="@+id/labbel"
(注意错字)中键入,在编译时,这将被视为确定。然而,在运行时,事情将无法正常工作,从小部件被错误定位到彻底崩溃,取决于Android版本。
如果您在android:layout_below="@id/labbel"
输入(注意错字和失踪+
标志),那么你会得到一个编译错误。
UPDATE
由于我不太清楚第一次,很显然,让我们再试一次。
<?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>
上面,你会看到一个RelativeLayout
。您会注意到每个ID的第一次出现会得到+
符号。每个ID的第二次和随后出现都没有得到+
符号。
您可以在所有这些符号上使用+
符号,但如果您输入错字,编译器将无法解决问题。
+
签名有效状态“分配一个新的ID”。没有+
符号状态“使用先前分配的ID,或者如果没有这样的ID,则在编译时失败”。
+1你的答案好多了。 – MByD 2011-04-20 14:03:12
你的意思是,当我第一次创建按钮时,我应该使用加号,并在我第一次编译后,我应该删除这个加号? 我有你的想法,当我在另一个地方像android调用按钮:layout_toRightOf =“@ id/add_button”我不得不删除加号 但在这里我谈论的标签中的按钮声明 我的意思是如果我要去我的XML文件中创建一个按钮是什么bettwen区别 对不起,打扰你:) – hazem 2011-04-20 14:13:23
他意味着当你创建按钮并为其分配一个ID时,使用'+'符号,但是当你引用这个按钮时(例如,位置,例如'android:layout_below' )你不应该使用'+'符号。 – MByD 2011-04-20 14:18:04
对于ID值,你通常应该使用 这句法形式: “@ + ID /名称”。 加上符号+,表示这是 一个新的资源ID,并且aapt工具 将在 R.java类中创建一个新的资源整数,如果它不存在 。
所以+
是用于分配一个新的ID,它也将工作时使用存在的ID,但它不是必要的。
不幸的是,这是文档中较弱的地方之一,并不是特别准确。 – CommonsWare 2011-04-20 13:59:30
第二个:
<Button android:id ="@+id/remove_button" />
定义了一个新的ID。当你想引用布局元素时,你会使用第一个。例如,在一个相对布局:
android:layout_below="@id/remove_button"
在Android布局资源XML源文件:
"@+id/anyId"
:添加新的ID
"@id/anyId"
:指现有的ID
应使用"@id/anyId"
只有当 “anyId” 已添加到R.java
类使用"@+id/anyId"
加号似乎表明ID已添加,并且缺席似乎表示该ID已存在。我只是在实践中看到了这一点,但没有注意到它的必要性......所以...我也想知道更多。 – 2011-04-20 13:51:53
@George Bailey这是一个答案 – Selvin 2011-04-20 13:54:10
@ + George;)我也想知道。它们基本上可以互换吗?我一直只用@ + id。顺便说一句,“Id已经存在”是你的意思是一个资源ID?这就说得通了。 – wired00 2011-04-20 13:54:15