Android XML中的许多标识符都需要@
前置作为对XML中其他位置定义的值的引用。
例如
@drawable/transparent
@color/red
@string/hello_world
然而,id的语法不同是很奇怪的:
@+id/my_id
显然,对于其他标识符,我们正在引用可在其他地方定义的资源,而对于id,我们正在创建标识符。为什么@+
的语法?我很好奇这个语法究竟意味着什么,除了@+id
之外还有其他用途(是@+string
还是@+color
?)。
答案 0 :(得分:3)
然而,id的语法不同是很奇怪的
语法有时不同。
为什么虽然@ +的语法?
表示我们是专门创建标识符,而@id/...
表示我们引用的标识符应该已在此资源文件中先前定义过。
例如:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@+id/entry"
android:layout_alignParentLeft="true"
android:text="@string/url"/>
<EditText
android:id="@id/entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/label"
android:inputType="text"/>
<Button
android:id="@+id/ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignRight="@id/entry"
android:layout_below="@id/entry"
android:text="@string/ok"/>
<Button
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@id/ok"
android:layout_toLeftOf="@id/ok"
android:text="@string/cancel"/>
</RelativeLayout>
我对label
和entry
标识符的第二次引用使用@id/
,表示标识符应该已在文件的前面定义过。
回到拖放GUI构建器之前的日子,这有助于在编译时检测ID不匹配。例如,如果我输入@id/ernty
而不是@id/entry
,我会收到编译错误,因为文件中没有@+id/ernty
。
除了@ + id
之外还有其他用途
我不知道。
答案 1 :(得分:0)
&#39; @id /&#39; :表示my_id
是id
&#39; @ + ID /... 39; :表示您创建新ID。
因此,当您在布局中定义视图的ID时,使用@+id/my_id
,但是当您引用它时(例如在android:layout_below中),您使用@id/my_id