2011-10-01 22 views
34

只是一個簡單的問題,開發Android應用程序時使用的ids.xml是什麼? 我看到其中包含了Android資源網頁的例子:什麼是ids.xml用於?

<resources> 
    <item name="snack" type="id"/> 
</resources> 

什麼會這樣作?

回答

17

id.xml通常用於聲明您在佈局中用於視圖的ID。

你可以使用類似

<TextView android:id="@id/snack"> 

了給定的XML。

+11

在「ids.xml」中定義它的任何好處,而不僅僅是做... android:id =「@ + id/snack」? – pyko

+5

因此,我應該使用android:id =「@ + id/newID」還是在ids.xml文件上聲明newID?什麼是最好的解決方案? –

+3

你也可以使用它''view.setTag(id,value)'來稍後從你的視圖中讀取該標記... – SparK

22

ids.xml具有以下優點:所有ids均已聲明,因此編譯器可以識別它們。 如果是這樣的:

<TextView 
    android:id="@+id/text1" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignBelow="@id/text2" 
    android:text="...."/> 
<TextView 
    android:id="@+id/text2" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="...."/> 

可能會導致編譯錯誤,因爲文本2是前refered宣佈

+0

你說得對,我有這個確切的問題。我知道這是舊帖子。在我的情況下,我必須將保存按鈕放在XML文件的頂部,但它會出現在屏幕上的按鈕中,我希望其他視圖能夠說出高於saveButton。我試圖讓保存按鈕在下面說,但這並不適合我。 – malhobayyeb

+1

儘管如此,但它並沒有太多的幫助。在這個例子中 - 你可以把'android:layout_alignBelow =「@ + id/text2」'和第二個'TextView','android:id =「@ id/text2」'。 – ataulm

+1

這是一個有效的解決方法,但在除指定的視圖以外的視圖中聲明id可能不是最好的風格選擇。爲了使語言正確地反映你的意圖,應該在使用它的視圖中聲明id。 –

8

爲id.xml另一個應用是對於佈局和庫項目。 比方說,你在一個庫中指定的選項泛型列表(對話)佈局

<CheckedTextView android:id="@+id/checked_option_one"... 
<CheckedTextView android:id="@+id/checked_option_two"... 
... 

,並且在一般(對話)片段

optionOneCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_one); 
optionTwoCheck = (CheckedTextView)rootView.findViewById(R.id.checked_option_two); 

處理這些意見,如果你刪除任何視圖聲明從主項目中的佈局副本中,您將在運行時得到「無此類字段」錯誤異常。

編譯器不會抱怨,但在運行時該id實際上並不存在/已知。

聲明中id.xml的ID,並使用

<CheckedTextView android:id="@id/checked_option_one"... 
... 

避免運行時錯誤

+1

「編譯器不會抱怨」 - 你確定嗎?至少,林特抱怨說如果使用了一個在項目中不存在的ID。無論如何,避免運行時錯誤(通過您描述的方法)將掩蓋症狀,但不是問題;您試圖根據未附加到視圖的ID獲取視圖。 – ataulm

+0

我的答案指的是基礎應用程序位於庫項目中,品牌版本使用經過修改的佈局,佈局中的某些視圖被品牌(主)應用程序中的覆蓋佈局定義省略。由於完整的佈局定義仍然存在於庫項目中,因此編譯器會找到該標識,但在運行時它不在那裏。 – mir

+0

好吧,有你,謝謝你的更新。 – ataulm

7

如果動態地創建視圖,預定義的ID在ids.xml給人以引用新創建的視圖中的posibility 。在使用setId(id)方法後,您可以像在XML中定義一樣訪問該視圖。這blog post有一個很好的例子。