這個庫,其實我之前已經(jīng)有封裝過一些了亲善,但是感覺還不規(guī)范,還差了些內(nèi)容逗柴,所以這次特意從開一個項目來專門做這個事情蛹头。畢竟我認(rèn)為開發(fā)和搞藝術(shù)一樣,我們也是追求完美的戏溺。
摘要
首先這個庫的意圖在于:能夠快速高效的開發(fā)渣蜗;里邊會包含到大部分在一個應(yīng)用軟件中用到的功能點的封裝,作為這樣一個庫旷祸,這里封裝的每一個功能點都應(yīng)該需要做到便于擴(kuò)展耕拷。下面介紹一下這個庫中包含的功能點:
- 界面(常用的Activity和Fragment)
- 提示相關(guān)(Dialog、Toast托享、PopUpWindow等)
- 網(wǎng)絡(luò)模塊
- 常用工具類集成
- 常用的三方包引入
之后會展開對每一個功能點進(jìn)行詳細(xì)的說明骚烧,這幾個模塊是我自己根據(jù)項目的積累所認(rèn)為的一些有必要的封裝。
注:建議以Module的方式引入闰围,這樣方便根據(jù)自己項目情況進(jìn)行調(diào)整止潘。
這里沒有太多的使用指南,更多是在Sample代碼中體現(xiàn)辫诅。
若是有疑問的可隨時提問凭戴,看到后就會及時處理
實現(xiàn)與介紹
界面
這部分包含了我在項目中所遇到的一些常見的界面結(jié)構(gòu)的整理,其中Activity和Fragment都會有相匹配的功能炕矮,即Activity有的功能么夫,F(xiàn)ragment也會包含,所以下文就以View作為界面的統(tǒng)稱肤视,有如下幾個部分:
- BaseView(公共部分档痪,包含權(quán)限申請,加載數(shù)據(jù)提示框邢滑,Toast腐螟,View注解,狀態(tài)欄控制等)
- BaseSwipeView(右滑返回)
- BaseHeaderView(帶標(biāo)題)
- BaseRefreshView(只有下拉刷新)
- BaseRefreshLoadingView(下拉刷新和上拉加載)
- BaseTabPagerView(TabLayout和ViewPager的結(jié)合)
- BaseHtmlView(WebView的封裝)
這里再給出一張這些類的繼承關(guān)系結(jié)構(gòu)圖:
每個界面困后,采用了面向接口編程乐纸,由于既有Activity又有Fragment,為了避免寫的實現(xiàn)代碼摇予,所以我又抽取了對應(yīng)的Helper去封裝汽绢,而Helper提供的一些和界面類似的方法,只是為了提供一個default的值侧戴,而界面中的方法是為了讓子類繼承后可重寫宁昭,方便修改跌宛。
注:這種設(shè)計方法是我自己想的,感覺還差點什么积仗,因為細(xì)心的同學(xué)能很快發(fā)現(xiàn)其實疆拘,Activity和Fragment中的代碼幾乎是一樣的,只是繼承的對象不同而已寂曹,但是因為目前還不知如何去更好的處理這種情況入问,如果哪位仁兄有高見可隨時聯(lián)系我,或者提issue稀颁。
網(wǎng)絡(luò)模塊
在項目中網(wǎng)絡(luò)請求肯定是必不可少的芬失,目前來看Retrofit的使用應(yīng)該是比較大眾的,使用熟悉之后會覺得方便很多匾灶,目前這個模塊封裝的功能包括:
- 通過泛型初始化一個默認(rèn)的請求接口棱烂,若想對請求接口分模塊書寫,也方便擴(kuò)展阶女;
- 支持https颊糜,只需傳入證書名稱;
- BaseNetService與BaseNet同時被繼承使用秃踩,可解決請求可能產(chǎn)生的內(nèi)存泄漏衬鱼;
可擴(kuò)展的功能(因為這些部分都是需要與后臺寫作的所以沒法寫固定了):
- 支持重寫convert,自定義解析憔杨;
- 錯誤信息可通過繼承ApiCallback統(tǒng)一處理鸟赫。
具體例子可看Sample中的CategoryFragment,每個類實現(xiàn)起來都很簡單消别,很方便抛蚤,其中自定義Convert解析與后臺約定好后,基本是寫一次就可以每次使用了寻狂。
注:其中https請求可自行調(diào)試岁经,Sample中暫未例子。
提示相關(guān)
BaseDialog
在Android中自定義Dialog還是比較常見的蛇券,而我們也是有好些代碼是會經(jīng)常重復(fù)寫的缀壤,所以這里我也簡單的封裝了一下:
- 寬和高的重新定義,可重寫getWidth和getHeight方法改變默認(rèn)值纠亚;
- 定義了從底部彈出的動畫塘慕;
- 定義了一些常見的Dialog的style;
有了這些菜枷,我們就能更容易的實現(xiàn)一個Dialog苍糠,當(dāng)然如果沒有特別要求的Dialog使用v7包下的AlertDialog也是挺好的叁丧。
其中在Sample中自定義了一個簡單的dialog(TipsDialog)啤誊,簡單介紹如何使用岳瞭。
BasePopupWindow
這里簡單的封裝了一下PopupWindow,直接定義好了一些常見的配置蚊锹,調(diào)整了位置的控制方式瞳筏,提供了一個靈活的在View的上下(2種),或者是在屏幕的某個方位(上中下x左中右的9種組合)牡昆,共計11種組合姚炕,也支持相應(yīng)的偏移量。
其中X方向的偏移量都是丢烘,大于0則向右偏柱宦,小于0向左偏;
Y方向的偏移量通常都是播瞳,大于0向下掸刊,小于0向上;
使用方式:
- 繼承BasePopupWindow赢乓,例如為PopA忧侧;
- 重寫抽象方法,其中g(shù)etContentViewId為內(nèi)容布局牌芋,getContentDefaultWidth為內(nèi)容的寬度蚓炬,需要設(shè)置為具體數(shù)值,構(gòu)造方法無需修改躺屁。
- 在界面中顯示肯夏,創(chuàng)建一個PopA實例,其中需要傳入context和一個在界面中最上方添加的寬或高都為0的View(用于保證PopupWindow的位置)犀暑,并調(diào)用自定義的11種show方法熄捍;
這樣是用起來就很簡單了,其中還包含了像Dialog一樣都會有陰影母怜,更多細(xì)節(jié)可以看看Sample中的TipsPopupWindow如何使用即可余耽。
注:因為設(shè)置了陰影,所以彈出動畫的方法會有些問題苹熏,所以不建議使用彈出動畫
ProgressBar與ProgressDialog
待實現(xiàn)...
常用工具類
AFGlideUtil
通過封裝Glide碟贾,實現(xiàn)圖片加載,包含:
- 加載圖片
- 加載高斯模糊的圖片
- 加載圓角圖片
- 加載圓形圖片
AFSizeUtil
這個是用來獲取屏幕大小以及各類尺寸之間的轉(zhuǎn)換所用
AFLog
這個是用于打印日志轨域,簡單封裝Logger日志庫袱耽,可在Application中設(shè)置是否為Debug,不是Debug時干发,就能不打印
WeakHandler
避免內(nèi)存泄露的Handler朱巨,使用時需要實現(xiàn)IWeakHandler接口,用于處理消息回調(diào)
注:工具類待續(xù)...
常用的三方包
引入的依賴包包:
def supportVersion = "25.3.1"
compile 'com.android.support:appcompat-v7:'.concat(supportVersion)
compile 'com.android.support:recyclerview-v7:'.concat(supportVersion)
compile 'com.android.support:support-v4:'.concat(supportVersion)
compile 'com.android.support:percent:'.concat(supportVersion)
compile 'com.android.support:design:'.concat(supportVersion)
//retrofit+rxjava
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.2.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.2.0'
compile 'io.reactivex:rxjava:1.2.1'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.google.code.gson:gson:2.7'
//圖片加載
compile 'com.github.bumptech.glide:okhttp3-integration:1.4.0@aar'
compile 'com.github.bumptech.glide:glide:3.7.0'
//頁面事件交互
compile 'org.greenrobot:eventbus:3.0.0'
//view注解
compile 'com.jakewharton:butterknife:8.4.0'
compile 'com.jakewharton:butterknife-compiler:8.4.0'
//日志
compile 'com.orhanobut:logger:1.15'
//BGABanner
compile 'cn.bingoogolapple:bga-banner:2.1.7@aar'
代碼混淆
若是要使用代碼混淆枉长,則可以在proguard-rules.pro中查看冀续,除了第三方包的混淆外琼讽,混淆所需的基本的配置也在里邊。
感謝
本庫中引用了一些第三方包(或依賴或下載的源碼)洪唐,在此表示感謝W甑拧!
有任何問題或者建議都可以聯(lián)系我~
License
Copyright 2017 arvinljw
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.