AFBaseLibrary

这个库,其实我之前已经有封装过一些了,但是感觉还不规范,还差了些内容,所以这次特意从开一个项目来专门做这个事情。毕竟我认为开发和搞艺术一样,我们也是追求完美的。

项目地址

摘要

首先这个库的意图在于:能够快速高效的开发;里边会包含到大部分在一个应用软件中用到的功能点的封装,作为这样一个库,这里封装的每一个功能点都应该需要做到便于扩展。下面介绍一下这个库中包含的功能点:

  • 界面(常用的Activity和Fragment)
  • 提示相关(Dialog、Toast、PopUpWindow等)
  • 网络模块
  • 常用工具类集成
  • 常用的三方包引入

之后会展开对每一个功能点进行详细的说明,这几个模块是我自己根据项目的积累所认为的一些有必要的封装。

注:建议以Module的方式引入,这样方便根据自己项目情况进行调整。

这里没有太多的使用指南,更多是在Sample代码中体现。

若是有疑问的可随时提问,看到后就会及时处理

实现与介绍

界面

这部分包含了我在项目中所遇到的一些常见的界面结构的整理,其中Activity和Fragment都会有相匹配的功能,即Activity有的功能,Fragment也会包含,所以下文就以View作为界面的统称,有如下几个部分:

这里再给出一张这些类的继承关系结构图:

AFLibViewsStruct.png

每个界面,采用了面向接口编程,由于既有Activity又有Fragment,为了避免写的实现代码,所以我又抽取了对应的Helper去封装,而Helper提供的一些和界面类似的方法,只是为了提供一个default的值,而界面中的方法是为了让子类继承后可重写,方便修改。

注:这种设计方法是我自己想的,感觉还差点什么,因为细心的同学能很快发现其实,Activity和Fragment中的代码几乎是一样的,只是继承的对象不同而已,但是因为目前还不知如何去更好的处理这种情况,如果哪位仁兄有高见可随时联系我,或者提issue。

网络模块

在项目中网络请求肯定是必不可少的,目前来看Retrofit的使用应该是比较大众的,使用熟悉之后会觉得方便很多,目前这个模块封装的功能包括:

  • 通过泛型初始化一个默认的请求接口,若想对请求接口分模块书写,也方便扩展;
  • 支持https,只需传入证书名称;
  • BaseNetService与BaseNet同时被继承使用,可解决请求可能产生的内存泄漏;

可扩展的功能(因为这些部分都是需要与后台写作的所以没法写固定了):

  • 支持重写convert,自定义解析;
  • 错误信息可通过继承ApiCallback统一处理。

具体例子可看Sample中的CategoryFragment,每个类实现起来都很简单,很方便,其中自定义Convert解析与后台约定好后,基本是写一次就可以每次使用了。

注:其中https请求可自行调试,Sample中暂未例子。

提示相关

BaseDialog

在Android中自定义Dialog还是比较常见的,而我们也是有好些代码是会经常重复写的,所以这里我也简单的封装了一下:

  • 宽和高的重新定义,可重写getWidth和getHeight方法改变默认值;
  • 定义了从底部弹出的动画;
  • 定义了一些常见的Dialog的style;

有了这些,我们就能更容易的实现一个Dialog,当然如果没有特别要求的Dialog使用v7包下的AlertDialog也是挺好的。

其中在Sample中自定义了一个简单的dialog(TipsDialog),简单介绍如何使用。

BasePopupWindow

这里简单的封装了一下PopupWindow,直接定义好了一些常见的配置,调整了位置的控制方式,提供了一个灵活的在View的上下(2种),或者是在屏幕的某个方位(上中下x左中右的9种组合),共计11种组合,也支持相应的偏移量。

其中X方向的偏移量都是,大于0则向右偏,小于0向左偏;
Y方向的偏移量通常都是,大于0向下,小于0向上;

使用方式:

  • 继承BasePopupWindow,例如为PopA;
  • 重写抽象方法,其中getContentViewId为内容布局,getContentDefaultWidth为内容的宽度,需要设置为具体数值,构造方法无需修改。
  • 在界面中显示,创建一个PopA实例,其中需要传入context和一个在界面中最上方添加的宽或高都为0的View(用于保证PopupWindow的位置),并调用自定义的11种show方法;

这样是用起来就很简单了,其中还包含了像Dialog一样都会有阴影,更多细节可以看看Sample中的TipsPopupWindow如何使用即可。

注:因为设置了阴影,所以弹出动画的方法会有些问题,所以不建议使用弹出动画

ProgressBar与ProgressDialog

待实现...

常用工具类

AFGlideUtil

通过封装Glide,实现图片加载,包含:

  • 加载图片
  • 加载高斯模糊的图片
  • 加载圆角图片
  • 加载圆形图片

AFSizeUtil

这个是用来获取屏幕大小以及各类尺寸之间的转换所用

AFLog

这个是用于打印日志,简单封装Logger日志库,可在Application中设置是否为Debug,不是Debug时,就能不打印

WeakHandler

避免内存泄露的Handler,使用时需要实现IWeakHandler接口,用于处理消息回调

注:工具类待续...

常用的三方包

引入的依赖包包:

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中查看,除了第三方包的混淆外,混淆所需的基本的配置也在里边。

感谢

本库中引用了一些第三方包(或依赖或下载的源码),在此表示感谢!!

有任何问题或者建议都可以联系我~

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.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容