android中的AdapterView閱讀

其實我是想看ListView,但是ListView135k,父類AbsListView216k,爺類AdapterView39k。所以只能從老人家下手了。AdapterView直接繼承了View,所以從這裏看也是比較簡單的方法。剛開始寫android的時候總覺得Spinner這種雞肋類存在沒什麼意義。看了類結構(前一篇有)之後才發現,這個類不常用,但是可以拿來學習,因爲很小啊。乍看AdapterView很難看出它是做什麼的。而AbsSpinner15k,Spinner25k這麼看起來就簡單多了吧。

不多說了,問題還得一點一點解決。


BaseLine

看源代碼的時候多少會涉及到baseline的問題。View帶有一個方法叫getBaseline(),默認返回-1。

baseline.png

baseline是英文中的東西。還記得中學時寫英文單詞用的作業本嗎?如上圖,baseline就是那根紅線。對於TextView這種包含文字的控件,baseline是需要考慮到的。

再留張圖以後做參考:


http://www.myfirstfont.com/glossary.html


onAttachedToWindow()和onDetachedFromWindow()

它們沒有被寫在Activity的生命週期中,初學的時候也沒有上。onAttachedToWindow()會在第一次onResume()之後被調用,這是view剛剛獲得canvas。onDetachedFromWindow()會在onDestroy()時被調用(可能是在後面),在調用時,已經沒有canvas用了。Spinner中,onDetachedFromWindow()被用於銷燬AlertDialog。我之前都在activity.onDestroy()中銷燬對話框。可是View沒有onDestroy方法,所以,如果需要在View中再添加AlertDialog,那只能在這裏銷燬了。回過頭來,View.onAttachedToWindow相當於Activity.onCreate(),而View.onDetachedFromWindow()相當於View.onDetachedFromWindow()。View有個包級方法dispatchDetachedFromWindow()這裏會調用onDetachedFromWindow(),也就是說,這個方法會被系統調用。activity的onAttachedFromWindow()和onDetachedFromWindow()中沒有對view的相應方法進行調用。





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章