天天看點

android 資源文字ids的作用

ids.xml——為應用的相關資源提供唯一的資源id。id是為了獲得xml中的對象而需要的參數,也就是object = findviewbyid(r.id.id_name)中的id_name。這些值可以在代碼中用android.r.id引用到。若在ids.xml中定...

ids.xml——為應用的相關資源提供唯一的資源id。id是為了獲得xml中的對象而需要的參數,也就是object = findviewbyid(r.id.id_name)中的id_name。這些值可以在代碼中用android.r.id引用到。

若在ids.xml中定義了id,則在layout中可如下定義@id/price_edit,否則@+id/price_edit。

為什麼使用ids?

我個人認為有以下幾點作用:

(1)優化編譯效率。

我們知道android的元件必須用一個int類型的id屬性來辨別其唯一性,id屬性必須以@開頭的值,例如,@id/abc、@+id/xyz等。

如果使用"@+id/name"形式,當r.java中存在名為name變量時,則該元件會使用該變量的值作為辨別。如果不存在該變量,則添加一個新的變量,并為該變量賦相應的值(不會重複)。

當修改完某個布局檔案并儲存後,系統會自動在r.java檔案中生成相應的int類型變量。變量名就是“/”後面的值,例如,@+id/xyz會在r.java檔案中生成int xyz = value,其中value是一個十六進制的數。如果xyz在r.java中已經存在同名的變量,就不再生成新的變量,而該元件會使用這個已存在的變量的值。

使用@id/name形式,預先定義的id已經生成,修改配置檔案時,也不會引起系統重新生成。

(2)統一管理資源id。

public.xml——描述的是為attr、id、drawable所指定的一個32的id值,這個值在current.xml檔案中會被用到。

當我們對public.xml做了改動後,執行make update-api指令,相應的current.xml就會添加這些改動。

在public.xml中資源資料的定義會影響到current.xml檔案,它們分别在frameworks/asecoreesesvalues和framework/aseapicurrent.xml中。

當進行核心檔案修改時,需要特别注意public.xml檔案的同步,該文檔定義了資源檔案的二進制相容性。是以需要小心對待該檔案,否則可能會破壞該版本的向後相容性。

  為了避免破壞相容性,新的資源需加在同類資源的最後(主要id值,按照id值遞增)。若是放置在中間會導緻随後的同類資源被賦予新的id值進而破壞相容性。

添加id的方法:

1)在ids.xml中添加公共id項,在public.xml中也添加相應的id項。這種辦法沒有相容性,會與後面的版本産生沖突。

2)在ids.xml中添加公共id項,每一項前面加一行<!– @hide –>的注釋,這樣就不用在public.xml中添加相應的項了。源碼中是的形式,這樣current中就不會有相應的段了。

3)在自己寫的xml中,使用android:id = “@+id/id_name”的形式,就和在eclipse中一樣,搜一下會發現android源碼中也有這麼用的,這樣ids.xml和public.xml都不用改,相容性我還不确定。

其它常用的資源檔案:

attrs.xml——當中定義的是類的屬性,屬性是為了能在xml檔案中被引用到,換句話說就是指定類中變量(也就是屬性的實際作用者)的值。這些屬性會在類的構造函數中用到。看過一兩個源碼就會明白,構造函數中的typedarray其實就是屬性的數組,數組的成員會被賦給類裡的成員,完成從xml的初始化。類的構造函數一般有三個,一個是class(context),這個用于在代碼中建立一個類,是以隻包含一個上下文;class(context,

attrs)和class(context, attrs, defstyle)用于從xml建立類的情況。

styles.xml——當中是各個控件的“樣式”,樣式由一個個屬性所組成。我們在編輯xml檔案的時候,不同的類所能設定的屬性有共同的,也有不同的,都是由樣式來控制的。具體可以去看styles.xml這個檔案的内容。

themes.xml其實也是樣式,隻是适用的範圍大一點,這個我是參考網上别人的看法,自己還沒研究過。

colors.xml——當中定義各種顔色值。

strings.xml——當中定義使用到的字元串常量。

繼續閱讀