id屬性僅僅能接受資源類型的值,也就是必須以@開頭的值,比如,@id/abc、@+id/xyz等。
假設在@后面使用“+”,表示當改動完某個布局文件並保存后,系統會自己主動在R.java文件里生成對應的int類型變量。變量名就是“/”后面的值。比如,@+id/xyz會在R.java文件里生成int xyz = value。當中value是一個十六進制的數。假設xyz在R.java中已經存在同名的變量,就不再生成新的變量。而該組件會使用這個已存在的變量的值。
也就是說,假設使用@+id/name形式,當R.java中存在名為name變量時,則該組件會使用該變量的值作為標識。假設不存在該變量。則加入一個新的變量。並為該變量賦對應的值(不會反復)。
既然組件的id屬性是一個資源id就能夠,那么自然能夠設置不論什么已經存在的資源id值,比如,@drawable/icon、@string/ok、@+string/you等。當然,也能夠設置android系統中已存在的資源id,比如。樓主提出的@id/android:list。那么這個android是什么意思呢,實際上。這個android就是系統的R類(在R.java文件里)所在的package。我們能夠在Java代碼編輯區輸入android.R.id.,就會列出對應的資源id。比如,也能夠設置id屬性值為@id/android:message。 <ListView android:id="@+id/android:message" android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
還有第二種方法查看系統中定義的id,進入<android sdk安裝目
錄>\platforms\android-1.5\data\res\values文件夾。找到ids.xml文件。打開后,內容例如以下:
<?xml version="1.0" encoding="utf-8"?> <resources>
<item type="id" name="price_edit">false</item> <item type="id" name="amount_edit">false</item> </resources>
若在ids.xml中定義了ID。則在layout中可例如以下定義@id/price_edit,否則@+id/price_edit
總結一下:
一、android:id="@android:id/tabhost" 是調用系統內部的ID和代碼中
mTabContent = (FrameLayout) findViewById(com.android.internal.R.id.tabcontent);是一回事。
二、android:id="@+id/llRoot" 就是自定義一個新的ID。
三、android:id="@id/llRoot"使用一個已經存在的ID號引用(跟第一個不同,這里引用的不是系統的)
