Activity整理總結(3)——Activity封裝
Activity作為四大元件之首,代表App的頁面,是App與使用者互動的一個大容器,因此,對Activity進行適當的封裝,是很有必要的。但是,Activity內容非常多,要封裝哪些內容比較合適呢?在此,根據開發經驗總結一下。
封裝Activity一般要先定義一個基類:BaseActivity類,考慮到相容性,一般是繼承AppCompatActivity這個類。在使用時,只要定義一個類繼承這個BaseActivity就可以了。
想了解封裝Activity更多詳情,歡迎加本人微信:1914532832。
1.狀態列
開發者都知道,一個頁面最頂上的狀態列,這個狀態列可以根據App的設計風格,預先封裝到Activity裡。封裝時,要注意儘量滿足設計師的各種可能的需求。封裝狀態列一般下面三種情況需要滿足:
1.配色狀態列:就是背景顏色和文字圖示顏色合理搭配的狀態列,比如深色背景配淺色文字圖示、或者淺色背景配深色文字圖示的,這樣搭配是為了讓使用者能看清狀態列上的內容。
2.沉浸式狀態列:就是狀態列背景色是透明或半透明的。一般設計頁面頂部有一個大圖片時,需要設定這種效果。
3.沒有狀態列:有些頁面需要全屏顯示,就需要把狀態列去掉,以騰出空間給其他內容。
這種封裝最大的問題是:螢幕適配。android系統的碎片化,導致不同版本Andriod系統和不同品牌手機,有的設定有效果,有的卻沒有效果。比如設定沉浸式效果的狀態列,Android5.0之後系統才支援沉浸式狀態列,而目前主流手機一般是Android 4.3以上系統,因此還有一部分手機不能顯示這種效果。又比如,修改狀態列文字顏色部分手機不會生效。為了滿足這種需求,一般做法是設定幾套不同佈局,根據不同的系統或手機設定不同的佈局,但是這樣做,明顯不是我們開發者願意的。因此,要將這種情況封裝到Activity裡,達到自動適配的目的。
2. 導航欄
一般App都會設定統一風格的導航欄,因此導航欄也可以封裝到Activity中,導航欄可以設定專門的佈局,然後通過include標籤插入到Activity對應的佈局裡,然後在Activity中通過引用導航欄佈局裡資源id來設定導航欄內容,比如可以在Activity中設定一些方法,來設定頁面的標題內容和顏色、導航欄的高度和顏色、是否有分割線、是否需要導航欄等。
3. 載入Fragment
自從Fragment推出後,很多頁面的架構都不再單純使用Activity,就算最簡單的頁面,也要用一個Activity加一個Fragment來實現。這樣做,為程式的擴充套件性提供了極大的方便。因此,BaseActivity一般也要封裝一些Fragment相關的內容,主要包括:載入Fragment,與Fragment的通訊(資料互相傳遞、導航欄內容和事件的修改等)
4. 轉場動畫
Activity之間跳轉時的動畫一般稱為轉場動畫,這種動畫在一個風格比較穩定的App裡,一般也就1到2套。比如從Activity1開啟Activity2,那麼轉場動畫可能是這樣:Activity1向左逐漸退出螢幕,同時Activity2從右側逐漸進入螢幕。而關閉Activity2重新回到Activity1頁面的轉場動畫剛好是相反的:Activity2向右逐漸退出螢幕,同時Activity1從左側逐漸進入螢幕。這種動畫也可以預先封裝到Activity裡,用時只需做一個簡單的選擇。
5. 彈出框
Toast和Dialog這類彈出框,也可以預先封裝到Activity中。特別是Dialog需要預先繫結到Activity的生命週期,以免發生App崩潰。
6. 非同步訊息
一個Activity頁面開啟,往往要開啟監聽很多資料的訊息,並將這些訊息及時更新到介面上以便讓使用者得知,這時就要用到類似EventBus、RxBus這樣的通訊庫,但是這種監聽一般都需要繫結到Activity的生命週期,以避免Activity關閉後,造成資源洩露或App異常崩潰。一般在BaseActivity的onCreate方法裡註冊監聽器,而在onDestroy方法裡釋放這些監聽器,這樣在繼承BaseActivity的類裡,就只需要直接開啟監聽器就可以了。
7. 架構初始化
如果用到MVP或者MVVM這些架構模式時,也可以將相關內容預先封住到Activity中。例如:DataBinding,Dagger物件的初始化等,為了使程式碼更通用,在此使用泛型是一個不錯的選擇。
有些人把佈局也封裝到Activity中,個人覺得這種方式不太好,至少android目前為止,還是把Activity與佈局檔案分開,把佈局也封裝到Activity中,就等於把這二者又綁到一起,更換佈局就要修改Activity中的程式碼,這明顯是不合理的。
如果你有更多可以封裝到Activity的內容,歡迎留言交流。
想了解封裝Activity更多詳情,歡迎加本人微信:1914532832。