聲明:本篇文章的目的是讓大家可以自己動手實現(xiàn)一個組件弥虐,本人寫的這個加載頁面組件也特意起名叫EasyLoading,所以不會考慮各種情況话浇。因為不同的APP有各種不同的風(fēng)格,界面布局也五花八門闹究,所以還是自己手動擼一個組件吧幔崖。
非入侵式組件
非入侵式組件是什么意思呢?簡單的說就是動態(tài)加載由代碼編譯生成的組件。如果是把組件寫在xml布局文件中的話就可以說是入侵式組件赏寇,因為它入侵了我們原來的布局吉嫩。哥的理解就是那么粗暴!
使用背景
每當(dāng)跳轉(zhuǎn)到一個新的頁面的時候往往會請求數(shù)據(jù)接口,很多時候我們的頁面需要通過請求得到的數(shù)據(jù)來填充嗅定。在拿到數(shù)據(jù)前頁面就會有個尷尬期自娩,這時就需要用一個組件把頁面的內(nèi)容區(qū)域遮蓋住,根據(jù)各種情況給用戶一個反饋渠退。這就是加載頁面的作用忙迁。
優(yōu)雅的使用加載頁面
我覺得每一個移動端的程序員都會做過這件事,就是寫一個xml加載布局碎乃,通過<include>標(biāo)簽使用加載布局把內(nèi)容區(qū)域遮蓋姊扔,數(shù)據(jù)加載成功的時候就把加載布局隱藏,失敗后就通過代碼修改加載布局里面控件的屬性來提示用戶梅誓。每寫一個頁面就重復(fù)一次這樣的工作恰梢,等到不勝其煩的時候就要思考怎么偷懶了。比較優(yōu)雅的方式就是通過代碼動態(tài)生成一個加載頁面組件梗掰,在需要用到的頁面把它添加到我們的根布局中嵌言,然后根據(jù)加載中、加載成功及穗、加載失敗摧茴、數(shù)據(jù)為空的情況調(diào)用組件里對應(yīng)的方法,這是面向?qū)ο蟮幕舅枷胗堤场Uf了那么多蓬蝶,上效果圖:
再看看我們布局文件的xml代碼
這樣就可以很容易的理解什么是非入侵式組件了,新增的加載布局對我們原來的布局代碼完全沒有影響猜惋。
組件剖析
先來看一下超級簡單的結(jié)構(gòu)
EasyLoading類丸氛,主要的作用是實例化一個加載布局,然后將加載布局添加到頁面的根布局中著摔,整個類不到100行代碼
EasyLoadingView類缓窜,這是個抽象的View類,整個類不到50行代碼谍咆。抽象了加載布局的主要實現(xiàn)方法禾锤,同學(xué)們可以通過實現(xiàn)這個類來自定義一個加載布局(可以參照LoadingView)然后在EasyLoading類中替換原來的加載布局。本人的目的就是鼓勵大家自己動手去寫一個和自己項目或自己的習(xí)慣高度契合的組件摹察。懶的同學(xué)直接用應(yīng)該問題也不大恩掷,替換一下圖片就可以了,加載中的圖片還是建議使用動圖供嚎,這里我使用了幀動畫實現(xiàn)黄娘。
LoadingView類是EasyLoadingView的實現(xiàn)類200行不到的代碼量峭状,主要通過代碼生成了加載中提示圖片、提示文字逼争、重載按鈕优床,就不貼代碼了。
EasyReloadInterface類一個簡單的回調(diào)接口誓焦,用于響應(yīng)重新加載按鈕點擊事件
可以看到代碼量是極少了胆敞,因為本人是個密集恐懼癥患者,看到密密麻麻的代碼就頭皮發(fā)麻杂伟,所以盡量寫得簡單移层,代碼簡單了也相信大家都能看得懂。再次強烈建議自己動手?jǐn)]一個組件稿壁,養(yǎng)成一個好習(xí)慣幽钢,把需要重復(fù)工作的環(huán)節(jié)逐個消滅,專注業(yè)務(wù)傅是,避免做重復(fù)工作匪燕。