2013-04-02 69 views
1

這兩個視圖位於RelativeLayout之內。 IDE會拋出一個錯誤,沒有@id/et_pass,但是如果我設置了@+id/et_pass,那就OK了。這是爲什麼?RelativeLayout id references

<ImageView 
    android:id="@+id/devider_zero" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@id/et_pass" <!-- Error is here --> 
    android:src="@drawable/registration_line" /> 

<EditText 
    android:id="@+id/et_pass" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_above="@+id/devider_first" 
    android:background="@android:color/transparent" 
    android:layout_gravity="left" 
    android:ellipsize="start" 
    android:ems="8" 
    android:hint="@string/password" 
    android:inputType="textPassword" 
    android:layout_marginTop="@dimen/register_layout_edittext_margin_top" 
    android:maxLines="1" /> 

回答

0

@+id/something@id/something之間的區別是,第一個被創建的ID,以及第二個是引用該已創建的ID。你第一次提到一個ID,你必須使用@+id/來創建它,之後的任何事情都可以使用@id/

當您查看屬性android:id時,如果您已經在文件的早期位置使用過,則不必使用@+id/

由於android編譯XML文件的方式,它首先讀取您的圖像視圖,達到您寫入@id/搜索R文件中的id並且找不到它的點。但是如果你打電話給@+id/,eclipse會搜索R文件中的id,找不到它並添加它。

此外,這是不特定於RelativeLayouts,如果你把相同的代碼以線性佈局,你也會得到這個錯誤

0

@+id指示解析器創建ID,如果它不存在。 @id用於指代現有的ID。