今天爲了好好研究了下@+id/name和@id/name的區別以及聯繫,又翻了翻文檔/guide/topics/resources/layout-resource.html中關於html
android:id的介紹,
java
Value for android:id For the ID value, you should usually use this syntax form: "@+id/name". The plus symbol, +, indicates that this is a new resource ID and the aapt tool will create a new resource integer in the R.java class, if it doesn't already exist. For example: <TextView android:id="@+id/nameTextbox"/> The nameTextbox name is now a resource ID attached to this element. You can then refer to the TextView to which the ID is associated in Java: findViewById(R.id.nameTextbox); This code returns the TextView object. However, if you have already defined an ID resource (and it is not already used), then you can apply that ID to a View element by excluding the plus symbol in the android:id value.
而後本身又實驗了一下,發現:android
@+id/name和@id/name的相同之處是當id已經定義過期它們都會返回一個id值,這時它們做用同樣。app
不一樣之處是若是這個id尚未定義過,那麼@+id/name將會使aapt tool生成(即定義)一個id值,並返回這個id值,而@id/name則會致使報錯,提示id值未找到。ide
這時忽然產生一個有趣的念頭:咱們徹底能夠在任何須要提供id值的地方都使用@+id/name,而不使用@id/name,由於使用@+id/name時,若是id已經定義過就不會從新定義一個id。以下圖:ui
並且定義id也不必定非得以android:id="@+id/name"的形式,能夠在任何接受id值的地方定義,而後android:id處直接使用。以下圖:this
固然了這樣混用容易使其餘人產生疑惑,我的認爲,在定義Id的地方纔使用@+id/name的形式,而在使用Id的地方使用@id/name應該更合適些。spa