天天看點

android相對布局中@id和@+id的差別(原理)

@id和@+id的差別,網上講的主要是@id是引用已經存在的控件,而@+id則是聲明一個新的id。

但是在相對布局中,​​

​layout_below="@id/xxx"​

​​和 ​

​layout_below="@+id/xxx"​

​似乎在顯示上沒什麼差別,而事實上是存在細微不同的。

用一個例子來講

<View
    android:layout_below="@+id/view1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

<View
    android:id="@id/view1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>      

上述代碼是正确的,即下面的順序是被允許的。但是去掉第一行的+号,或者将第二行與第一行的位置換一下,便不行!!!

android:layout_below="@+id/view1"
android:id="@id/view1"      

原理就是:

@+id會在R.java file裡面添加一個新的id,這也就是能用​​

​findViewById(R.id.xxx)​

​找到控件的原因,而@id就直接在這個檔案裡查找了。

而為什麼已經存在了某個id,在layout_below裡仍可以@+id呢?

因為android能容忍重複的id存在,并不是說會出現兩個相同的id,而是新的id覆寫原有的id,而在這兒@+id不過是将id重複建立了一遍。