深刻理解android:id以及@+id/name和@id/name的區別聯繫

今天爲了好好研究了下@+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

相關文章
相關標籤/搜索