自定義View基本法
我們使用手機优俘,是想要獲取某些信息,而 View 是這些信息的直接展示界面掀序,因為信息種類繁多帆焕,為了更好的展示這些信息, View 也必須有多種多樣不恭,Android 系統(tǒng)本身就給我們提供了不少類型的 View叶雹,但有時仍不能滿足我們的需要,所以有時可能需要自定義 View 來完成任務换吧。
自定義 View 有許多需要注意的地方折晦,關于這些需要注意的內容,我都會整理在這里沾瓦,其名為《自定義 View 基本法》满着。
第一條:盡量避免自定義 View。
由于 View 直接承載了與用戶交互的重任贯莺,所以必須要考慮到各種情況风喇,例如:
- 當沒有設置寬高屬性時,View 默認應該多大缕探。
- 橫豎屏轉換時 View 可能重新設定大小响驴,此時應如何處理。
- View 因為特殊情況被銷毀后重建撕蔼,應如何保存和恢復數據豁鲤。
由于某些情況很特殊秽誊,觸發(fā)條件也特殊,我們簡單的實現了一個自定義了一個 View琳骡,可能在 99% 的情況下都是正常的锅论,但在某些特殊情況下就會出問題。
而系統(tǒng)提供給我們的組件都是經過千錘百煉的楣号,基本上考慮到了各種特殊情況的處理最易,所以通常情況下,系統(tǒng)提供給我們的組件穩(wěn)定性要好一些炫狱。所以我的建議是藻懒,能使用系統(tǒng)提供的組件的盡量使用系統(tǒng)的。
除此之外视译,使用系統(tǒng)提供的組件也方便于其他人快速讀懂項目嬉荆,便于交流。
第二條:盡量避免從頭開始酷含。
如果一定要使用自定義 View鄙早,那么盡量去繼承系統(tǒng)已有的組件,并重寫其中的部分方法椅亚,不要自己從頭開始寫限番。例如:圖像相關的 View 可以考慮繼承 ImageView,容器類 View 可以考慮繼承 LinerLayout呀舔,RelativeLayout 等弥虐,原因同上。
第三條:處理特殊情況媚赖。
針對能想到的一些特殊情況進行處理并且測試躯舔,盡量保證自定義 View 能適應各種特殊場景。
第四條:留下文檔省古。
程序員有兩大痛苦粥庄,1、別人寫的項目居然沒有文檔豺妓。2惜互、自己寫的項目居然要寫文檔。
雖然有時候文檔寫起來確實挺麻煩琳拭,但是個人建議要留下一份文檔训堆,至少要為自己寫的程序添加有效的注釋,這不僅是方便他人白嘁,更重要的是方便自己以后修改項目坑鱼。
- 于自定義View而言,首先要標明這個自定義View是解決什么問題,有怎樣的效果鲁沥,使用的場景如何呼股。
- 其次要在關鍵部位標注實現原理。(例如:顯示圓形的ImageView画恰,要標明圓形是如何實現的彭谁,使用的是遮罩還是剪裁。)
- 避免無效注釋 (例如:在onDraw上面標注繪圖)允扇,大家都知道這個是繪圖缠局,但繪制邏輯才是重點,要去標注繪制邏輯考润。
第五條:面向結果編程狭园。
我們既然使用自定義View,自然是想要實現一些系統(tǒng)組件無法實現的效果糊治,所以要時刻謹記自己所需要的內容唱矛,讓其中的所有邏輯都為這個結果服務,我自己實現自定義 View 一般有如下步驟:
- 原型俊戳,用我能想到的邏輯實現原型(demo),不管其代碼復雜度馆匿,首先要得到結果抑胎,通常情況下,第一份代碼可得性和整潔性都比較差渐北。
- 優(yōu)化阿逃,在原型的基礎上對代碼進行優(yōu)化,剔除不必要的內容赃蛛,例如嘗試優(yōu)化邏輯恃锉,對與一些重復性的內容抽取函數進行封裝,想辦法消滅一些中間變量呕臂。同時添加上必要注釋破托,讓其邏輯更加清晰易懂。
- 測試歧蒋,對其進行場景測試土砂,盡量保證其正常運行。