2011-08-04 240 views
9

必須在XML佈局中的視圖的資源ID在所有佈局中唯一嗎?Android資源ID

例如,我正在研究一個小配方管理器應用程序。我有一個用於添加新配料的佈局文件。在這個佈局中,我有一個EditText作爲我想稱之爲「edt_name」的成分。但是,我擔心這個名字太籠統了。例如在其他XML佈局文件中,我可能還有一個EditText作爲食譜名稱,烹飪過程名稱等。

但是,我也不想讓標籤比必要的更復雜。如果可以的話,我想避免調用前述的EditText「edt_name_new_ingredient」。

我很好奇開發者如何組織他們的資源。就我所知,Android不支持資源的子目錄,因此命名機制可能會變得非常混亂。

回答

6

沒有資源ID不應該是唯一跨越不同的XML佈局,他們必須在一個特定的XML文件中唯一。

+0

但是當我在我的java文件中訪問R.id.(view_id)時,我從所有視圖中獲取了id的列表?我只是嘗試在兩個具有相同名稱的不同XML佈局文件中命名兩個EditBox。我沒有收到錯誤消息,但是當我使用R.id.(view_id)時,我只有一個view_id,並且我不知道該id指向哪個EditText! –

+5

你是對的......但Android從你的活動中使用setContentView方法設置的xml佈局中,從所有視圖標識中選擇視圖標識。你在列表中......這就是爲什麼你沒有得到任何錯誤。嘗試更改編輯文本的ID在兩個XML ...然後你可以更好地瞭解發生了什麼 –

+0

我剛剛測試了你說的,你說得對,success_anil。 R.id.(view_id)調出所有佈局的所有視圖,但如果在當前使用的佈局中找不到視圖,則該程序將崩潰。所以如果你在不同的佈局文件中有兩個具有相同ID的視圖,它將自動使用當前佈局文件中的一個。 –

2

資源ID在包內是命名空間。當你訪問一個資源時(例如XML),包名被隱式設置爲當前的包名。您可以將其他資源文件放入不同的包中,並引用您的代碼或XML中的資源文件(這就是訪問SDK附帶的平臺資源的方式)。

同樣,在代碼中,您可以訪問其他包的R類並使用它的資源,但同一包中的所有包必須具有唯一的名稱。

更多信息可在文檔here中找到。

+0

感謝您的鏈接。我將我的應用程序構建爲一個單一的項目,所以我只有一個「R」類。我想這意味着我所有佈局文件中的所有視圖都必須具有唯一的ID? –