Android平台framework層的開發(收集,ZT)

來源:互聯網
上載者:User
framework的開發比應用程式層就要煩的多啦。做應用在eclipse中就足夠了,用android系統中的控制項等工具,或者是自己寫個類來實現 特定的功能。而framework層的開發,需要往源碼中添加代碼、xml、圖片、id等等資料,這個id可是費了我好大的勁才搞定的。在項目開始的一個 半月裡,我探索、嘗試了很多,現在把我的經驗分享出來。網上關於framework層的開發資訊很少,多是靠自己。

  最有效方式就是分 析android的源碼,看google是怎樣實現一個類的,以及類的層次。我現在看的主要是widget和app中的代碼,其他的還沒涉及。像 View,ViewGroup,Activity,ActivityThread都是非常重要的類,也是代碼量很大的類,我只是大概地過了下,還沒有仔細 分析過。

  我花大力氣的地方是資源檔夾下values中幾個檔案的作用。

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

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

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

  ids.xml是公用的id,也就是對應用程式層可見的id,id是為了獲得xml中的對象而需要的參數,也就是Object = findViewById(R.id.id_name)中的id_name。這些值可以在代碼中用android.R.id引用到

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

  當我們對public.xml做了改動後,執行make update-api命令,相應的current.xml就會添加這些改動。因為這些值按類型被放在不同的段上,類型相同的必須連續存放,不指定id值的話系統會自動計算出下一個值。

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

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

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

  上面這些希望能對大家有所協助吧。

 

http://tech.it168.com/a2010/1108/1122/000001122996.shtml

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.