AFBaseLibrary

项目地址:arvinljw/AFBaseLibrary
简介:Android 开发框架,提高开发效率,包括常用的功能,内容会长期维护。
更多:作者   提 Bug   示例 APK   
标签:
Android开发框架-提高开发效率-

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

摘要

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

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

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

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

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

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

实现与介绍

界面

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

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

每个界面,采用了面向接口编程,由于既有 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.
Android 开发经验分享
C 轮融资近 30 亿元理财推荐
Android 开发经验分享
C 轮融资近 30 亿元理财推荐