介绍
安卓基础开发库 :主要包括 网络请求、图片加载、数据库、事件总线、缓存、权限管理、工具类 模块。
其中,网络请求使用Retrofit+RxJava实现,图片加载使用Glide实现(可替换),数据库使用GreenDao实现(可替换),事件总线使用EventBus实现(可替换),权限管理使用RxPermission实现。
对以上提及的框架如果不熟悉,建议先行了解~
具体使用可查看Demo示例,如果觉得对你有帮助,不妨点个★star支持鼓励我~
使用说明
1. 添加依赖
在项目module下的gradle中添加以下依赖:
compile 'com.ljy.ring:devring:x.x.x' //版本号请到github确认
2. 初始化、配置、构建
在Application的onCreate中进行初始化、配置、构建。
务必按顺序执行这三步。
2.1 初始化
DevRing.init(this);
2.2 配置
根据你的需求进行相关模块的全局配置,下面将对每个配置方法进行说明。
2.2.1 配置网络请求模块
DevRing.configureHttp()
//设置BaseUrl
.setBaseUrl(UrlConstants.BASE_URL)
//设置请求超时时长,单位秒
.setConnectTimeout(15)
//是否开启Cookie,默认不开启
.setIsUseCookie(true)
//设置Cookie是否为持久化类型
.setIsCookiePersistent(true)
//设置全局的header信息
.setMapHeader(mapHeader)
//设置是否启用缓存,默认不启用
.setIsUseCache(true)
//设置缓存地址,传入的file需为文件夹,默认保存在/storage/emulated/0/Android/data/com.xxx.xxx/cache/retrofit_http_cache下
.setCacheFolder(file)
//设置缓存大小,单位byte,默认20M
.setCacheSize(size)
//设置有网络时缓存保留时长,单位秒,默认60秒
.setCacheTimeWithNet(time)
//设置无网络时缓存保留时长,单位秒,默认一周
.setCacheTimeWithoutNet(time)
//设置是否开启失败重试功能,目前仅支持普通的网络请求,上传下载不支持。默认不开启
.setIsUseRetryWhenError(true)
//设置失败后重试的最大次数,默认3次
.setMaxRetryCount(2)
//设置失败后重试的延迟时长,单位秒,默认3秒
.setTimeRetryDelay(5)
//设置是否开启Log,默认不开启
.setIsUseLog(true);
如果以上的配置无法满足你的要求,那么可以通过以下方法获取相关Builder进行具体定制(不需要调用Builder的build()方法,后面发起网络请求时内部会自动进行build操作。)
//获取OkHttpClient.Builder
DevRing.configureHttp().getOkHttpClientBuilder().xxx();
//获取Retrofit.Builder
DevRing.configureHttp().getRetrofitBuilder().xxx();
2.2.2 配置图片加载模块
DevRing.configureImage()
//设置“加载中”状态时显示的图片
.setLoadingResId(R.mipmap.ic_image_load)
//设置“加载失败”状态时显示的图片
.setErrorResId(R.mipmap.ic_image_load)
//设置是否开启状态切换时的过渡动画,默认false
.setIsShowTransition(true)
//设置是否使用okhttp3作为网络组件,默认true
.setIsUseOkhttp(false)
//设置内存缓存大小,不建议设置,使用框架默认设置的大小即可
.setMemoryCacheSize(size)
//设置Bitmap池大小,设置内存缓存大小的话一般这个要一起设置,不建议设置,使用框架默认设置的大小即可
.setBitmapPoolSize(size)
//设置磁盘缓存地址是否在外部存储中,默认false
.setIsDiskCacheExternal(true)
//设置具体的磁盘缓存地址,传入的file需为文件夹
.setDiskCacheFile(file)
//设置磁盘缓存大小,单位byte,默认250M
.setDiskCacheSize(200*1024*1024);
如果你需要替换默认实现的图片框架(Glide),那么
- 创建图片管理者类,要求实现IImageManager接口
- 通过DevRing.configureImage(IImageManager)方法传入图片管理者类
- 传入后和上面一样可以进行相关配置。
DevRing.configureImage(new FrescoManager())
.setXXX()
...
.setXXXX();
具体可查看Demo,演示了如何使用Fresco替换Glide
替换为Fresco后,相关的ImageView需换成SimpleDraweeView。
2.2.3 配置事件总线模块
DevRing.configureBus()//配置默认的EventBus
//设置用于加速的Index,具体生成方法请参考我的那篇EventBus介绍
.setIndex(new MyEventBusIndex())
//设置是否使用index进行加速
.setIsUseIndex(true);
如果你需要替换默认实现的事件总线框架(EventBus),那么
- 创建事件总线管理者类,要求实现IBusManager接口
- 通过DevRing.configureBus(IBusManager)方法传入事件总线管理者类
DevRing.configureBus(new RxBusManager());
具体可查看Demo,演示了如何使用RxBus替换EventBus
2.2.4 配置数据库模块
由于GreenDao的特殊性以及具体数据表的不确定,无法很好地集成到DevRing当中。
所以需要进行如下操作:
- 创建数据库管理者类,要求实现IDBManager接口
- 通过DevRing.configureDB(IDBManager)方法传入数据库管理者。
- DevRing中已提供了GreenDao的一些辅助类,如数据表管理者基类,以及用于数据库升级迁移数据的OpenHelper。
所以创建起来不会复杂,具体过程请参考Demo
DevRing.configureDB(new GreenDBManager());
使用其他数据库的话,也同样是通过DevRing.configureDB(IDBManager)方法传入数据库管理者。
Demo中演示了如何使用原生的数据库替换GreenDao
DevRing.configureDB(new NativeDBManager());
2.2.5 配置缓存模块
DevRing.configureCache()
//设置磁盘缓存最大缓存大小,单位为byte,默认无上限
.setDiskCacheMaxSize(50*1024*1024)
//设置磁盘缓存的文件夹数量上限,默认无上限
.setDiskCacheMaxCount(10)
//配置磁盘缓存的地址,传入的File需为文件夹,默认保存在/data/user/0/com.xxx.xxx/cache下
.setDiskCacheFolder(file);
2.2.6 配置其他模块
DevRing.configureOther()
//设置是否开启崩溃日志功能,默认不开启
.setIsUseCrashDiary(true)
//设置崩溃日志的输出地址,传入的file需为文件夹,默认保存在/storage/emulated/0/Android/data/com.xxx.xxx/cache/crash_log下
.setCrashDiaryFolder(file)
//设置是否显示Ringlog打印的内容,默认true
.setIsShowRingLog(true)
//设置Toast样式,不设置的话则采用系统默认的Toast效果
//toastStyle的实现可参考库中自带的ToastBlackStyle,或者Demo中的CustomToastStyle
//如果需要在具体场景中动态切换样式,调用RingToast.initStyle(toastStyle)即可
.setToastStyle(toastStyle);
2.3 构建
DevRing.create();
3. 开始调用
几大模块都是通过DevRing.xxxManager()得到管理者,然后进行具体操作。
3.1 网络请求模块
3.1.1 获取Retrofit的请求API接口
DevRing.httpManager().getService(XXXApiService.class);
比如:获取用于登录请求的Observable
Observable observable = DevRing.httpManager().getService(UserApiService.class).login();
3.1.2 普通请求
DevRing.httpManager().commonRequest(observable, new CommonObserver<HttpResult<List<MovieRes>>>() {
@Override
public void onResult(HttpResult<List<MovieRes>> result) {
}
@Override
public void onError(HttpThrowable throwable){
}
}, TAG);
调用commonRequest()方法发起普通请求
- 参数1为普通的网络请求Observable,如3.1.1中的登录请求Observable。
- 参数2为请求回调Observer。
- 库中提供了CommonObserver,对异常信息进行了简单封装。
- 参数3可传入String类型的Tag来控制生命周期(终止网络请求)
- 例如传入"yourTag",当想要手动终止该请求时,调用DevRing.httpManager().stopRequestByTag("yourTag"); 即可
- 参数3也可传入用于控制生命周期的LifecycleTransformer。
- 可通过RxLifecycleUtil来获取与页面生命周期绑定的LifecycleTransformer。
- 例如传入RxLifecycleUtil.bindUntilEvent(lifeEmitter, FragmentEvent.DESTROY)),则表示该请求会在Fragment Destroy时销毁。其中lifeEmitter须实现IBaseFragment接口。
- 例如传入RxLifecycleUtil.bindUntilEvent(lifeEmitter, ActivityEvent.DESTROY)),则表示该请求会在Activity Destroy时销毁。其中lifeEmitter须实现IBaseActivity接口。
- 你也可以使用RxLifecycleUtil.RxBindUntilEvent(Observable<R> lifecycleable, R event)方法来获取,其中lifecycleable为事件发射者,event用于指定销毁的事件(时机)。 涉及RxJava,不了解的可以先查看Retrofit+RxJava的生命周期控制部分。
- 传入null 则表示不对该请求进行生命周期控制
3.1.3 上传请求,可监听进度
DevRing.httpManager().uploadRequest(observable, new UploadObserver(UrlConstants.UPLOAD) {
@Override
public void onResult(Object result) {
}
@Override
public void onError(long progressInfoId, HttpThrowable throwable) {
}
@Override
public void onProgress(ProgressInfo progressInfo) {
}
}, TAG);
调用uploadRequest()方法发起上传请求
- 参数1为上传的网络请求Observable。
- 参数2为上传的请求回调UploadObserver,可用于监听上传进度。
- 如果不需要监听上传进度,则使用空的构造函数,或者使用3.1.2的commonRequest
- 如果是普通地监听某个上传的进度,则使用一个参数的构造函数,并传入上传的URL地址
- 如果是使用同一个URL但根据请求参数的不同而上传不同资源的情况,则使用两个参数的构造函数,第一个参数传入上传的URL地址,第二参数传入自定义的字符串加以区分。
- onProgress(ProgressInfo progressInfo) 中获取进度信息
- onError(long progressInfoId, String errMessage) 中的progressInfoId为0,则为请求相关的异常,如果不为0,则为上传读写过程的异常
- 参数3在 3.1.2中已作了说明
3.1.4 下载请求,可监听进度
DevRing.httpManager().downloadRequest(file, observable, new DownloadObserver(UrlConstants.DOWNLOAD) {
@Override
public void onResult(boolean isSaveSuccess, String filePath) {
}
@Override
public void onError(long progressInfoId, HttpThrowable throwable) {
}
@Override
public void onProgress(ProgressInfo progressInfo) {
}
}, TAG);
调用downloadRequest()方法发起下载请求
- 参数1为目标保存文件,下载的内容将保存于此。
- 参数2为下载的网络请求Observable。
- 参数3为下载的请求回调DownloadObserver,可用于监听下载进度。
- 如果不需要监听下载进度,则使用空的构造函数,或者使用3.1.2的commonRequest
- 如果是普通地监听某个下载的进度,则使用一个参数的构造函数,并传入下载的URL地址
- 如果是使用同一个URL但根据请求参数的不同而下载不同资源的情况,则使用两个参数的构造函数,第一个参数传入下载的URL地址,第二参数传入自定义的字符串加以区分。
- onResult(boolean isSaveSuccess, String filePath) 中的isSaveSuccess表示是否成功保存到目标文件中,filePath为目标文件的绝对路径。
- onProgress(ProgressInfo progressInfo) 中获取进度信息
- onError(long progressInfoId, String errMessage) 中的progressInfoId为0,则为请求相关的异常,如果不为0,则为下载读写过程的异常
- 参数4在 3.1.2中已作了说明
下载方面并没提供"多线程下载"、"断点续传"的功能。
如果需要的话,这里推荐github上的下载框架FileDownloader1,FileDownloader2。
3.1.5 刷新管理者
如果你在2.2配置初始化后,需要对Http的全局配置进行修改,
请在修改配置后调用DevRing.httpManager().refreshInstance(); 进行刷新,
它将根据你最新的Http配置进行重新构建。
3.2 图片加载模块
3.2.1 普通加载图片
DevRing.imageManager().loadNet(url, imageView); //加载网络图片到控件
DevRing.imageManager().loadRes(resId, imageView);//加载res资源图片到控件
DevRing.imageManager().loadAsset(assetName, imageView);//加载asset资源图片到控件
DevRing.imageManager().loadFile(file, imageView);//加载本地图片文件到控件
- 将自动使用 2.2.2 配置的“加载中显示的图片”,“加载失败显示的图片”,“是否开启过渡效果” 来进行加载。
3.2.2 定制化加载图片
相比3.2.1,多了一个LoadOption参数,用于设置加载选项。
//加载图片,并应用圆角、模糊、灰白效果。
DevRing.imageManager().loadXXX(url, imageView, new LoadOption().setRoundRadius(80).setIsGray(true).setBlurRadius(5));
LoadOption目前支持设置
- 加载中状态显示的图片
- 加载失败状态显示的图片
- 是否开启状态切换时的过渡动画
- 是否加载为圆形图片
- 加载为圆角图片的圆角值
- 加载为模糊图片的模糊值
- 是否加载为灰白图片
- 边框的颜色与粗细(目前仅支持圆形模式)
3.2.3 预加载图片
DevRing.imageManager().preLoad(url);
3.2.4 获取网络图片的Bitmap
DevRing.imageManager().getBitmap(context, url, new ImageListener<Bitmap>(){
@Override
public void onSuccess(Bitmap result) {
//获取成功,回调在主线程
}
@Override
public void onFail(Throwable throwable) {
//获取失败,回调在主线程
}
});
3.2.5 下载图片到指定文件
DevRing.imageManager().downLoadImage(context, url, file, new ImageListener<File>(){
@Override
public void onSuccess(File result) {
//下载成功,回调在后台线程
}
@Override
public void onFail(Throwable throwable) {
//下载失败,回调在后台线程
}
});
3.2.6 清空内存缓存
DevRing.imageManager().clearMemoryCache();
3.2.7 清空磁盘缓存
DevRing.imageManager().clearDiskCache();
3.2.8 调用接口以外的方法
如果图片管理者中定义了IImageManager接口以外的方法,可以通过传入具体类型来调用,如下:
DevRing.<FrescoManager>imageManager().xxx();
3.3 事件总线模块
3.3.1 订阅
DevRing.busManager().register(subscriber);
3.3.2 解除订阅
DevRing.busManager().unregister(subscriber);
3.3.3 发送普通事件
DevRing.busManager().postEvent(event);
3.3.4 发送粘性事件
DevRing.busManager().postStickyEvent(event);
3.3.5 调用接口以外的方法
如果事件总线管理者中定义了IBusManager接口以外的方法,可以通过传入具体类型来调用,如下。
DevRing.<EventBusManager>busManager().cancelDelivery(event);
3.4 数据库模块
需先在数据库管理者(实现IDBManager接口)中的putTableManager()方法里,将数据表管理者通过(kye,value)方式放进Map中。
public class GreenDBManager implements IDBManager {
MovieTableManager mMovieTableManager;
.....
@Override
public void putTableManager(SimpleArrayMap<Object, ITableManger> mapTables) {
mapTables.put(Movie.class, mMovieTableManager);
}
}
其中的MovieTableManager 是实现了ITableManger的数据表管理者。
如果你数据库模块的实现也使用GreenDao框架,那么可以继承Devring中提供的数据表管理者基类GreenTableManager,重写getDao()方法返回自动生成的对应表的Dao类,即可快速完成数据表管理者的创建。具体过程请参考Demo。
然后通过key值获取对应的数据表管理者,并进行增删改查等操作。
DevRing.tableManager(Movie.class).xxx();
3.4.1 增
DevRing.tableManager(key).insertOne(object); //插入一个数据
DevRing.tableManager(key).insertSome(list); //插入多个数据
DevRing.tableManager(key).insertOrReplaceOne(object); //插入一个数据,如果已存在则进行替换,根据主键来判断是否已存在
DevRing.tableManager(key).insertOrReplaceSome(list); //插入多个数据,如果已存在则进行替换,根据主键来判断是否已存在
3.4.2 删
DevRing.tableManager(key).deleteOne(object); //删除一个数据
DevRing.tableManager(key).deleteSome(list); //删除多个数据
DevRing.tableManager(key).deleteOneByKey(primarykey); //根据主键删除一个数据
DevRing.tableManager(key).deleteSomeByKeys(listPrimarykey); //根据主键删除多个数据
DevRing.tableManager(key).deleteAll(); //删除表中所有数据
3.4.3 改
DevRing.tableManager(key).updateOne(object); //更新一个数据
DevRing.tableManager(key).updateSome(list); //更新多个数据
3.4.4 查
DevRing.tableManager(key).loadOne(primarykey); //根据主键获取一个数据
DevRing.tableManager(key).loadAll(); //获取全部数据
DevRing.tableManager(key).count(); //获取表数据的数量
DevRing.tableManager(key).rawQuery(sql, selectionArgs); //条件查询
3.4.5 执行SQL语句
DevRing.tableManager(key).execSQL(sql); //执行SQL语句
3.4.6 调用接口以外的方法
如果表管理者中定义了ITableManager接口以外的方法,可以通过传入具体类型来调用。
例如:GreenTableManager中另外定义了queryBuilder()方法,用于各种更高级查询,
具体可查看我的那篇GreenDao使用介绍。
DevRing.<GreenTableManager>tableManager().queryBuilder().list();
3.5 缓存模块
3.5.1 内存缓存
DevRing.cacheManager().memoryCache().put(key, object); //存入数据
DevRing.cacheManager().memoryCache().get(key); //取出数据
DevRing.cacheManager().memoryCache().remove(key); //移除数据
DevRing.cacheManager().memoryCache().contains(key); //是否包key值对应的数据
DevRing.cacheManager().memoryCache().clear(); //清空所有数据
3.5.2 磁盘缓存,可指定缓存时长
DevRing.cacheManager().diskCache(name).put(key, object); //存入数据
DevRing.cacheManager().diskCache(name).put(key, object, saveTime); //存入数据,并指定缓存时长
DevRing.cacheManager().diskCache(name).getXXX(key); //取出数据
DevRing.cacheManager().diskCache(name).remove(key); //移除数据
DevRing.cacheManager().diskCache(name).getCacheCount(); //获取已缓存的数量
DevRing.cacheManager().diskCache(name).getCacheSize(); //获取已缓存的空间大小
DevRing.cacheManager().diskCache(name).clear(); //清空所有数据
3.5.3 SharedPreference
DevRing.cacheManager().spCache(name).put(key, object); //存入数据
DevRing.cacheManager().spCache(name).getXXX(key); //取出数据
DevRing.cacheManager().spCache(name).getAll(); //取出全部数据
DevRing.cacheManager().spCache(name).remove(key); //移除数据
DevRing.cacheManager().spCache(name).clear(); //清空所有数据
3.6 权限管理模块
DevRing.permissionManager().requestEachCombined(activity, new PermissionListener() {
@Override
public void onGranted(String permissionName) {
//如果全部权限都被授予
}
@Override
public void onDenied(String permissionName) {
//如果用户拒绝了其中一个授权请求
}
@Override
public void onDeniedWithNeverAsk(String permissionName) {
//如果用户拒绝了其中一个授权请求,且勾选了不再提醒,则需要引导用户到权限管理页面开启
}
}, Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.CAMERA);
- 还提供了一个requestEach()方法,参数都一样。
- 如果要求申请的权限全都授予才能使用某功能的话,建议使用requestEachCombined()方法来申请。
3.7 Activity管理模块
改自JessYan的AppManager
DevRing.activityListManager().addActivity(activity); //存进一个activity
DevRing.activityListManager().removeActivity(activity); //移除一个activity
DevRing.activityListManager().getCurrentActivity(); //获取在前台的activity
DevRing.activityListManager().getTopActivity(); //获取最近启动的的activity
DevRing.activityListManager().getActivityList(); //获取存放activity的list
DevRing.activityListManager().killActivity(class); //关闭指定class的所有activity
DevRing.activityListManager().activityInstanceIsLive(activity); //指定的activity实例是否存活
DevRing.activityListManager().activityClassIsLive(class); //指定class的activity是否存活(同一个 class可能有多个activity实例)
DevRing.activityListManager().findActivity(class); //获取指定class的activity,没有则返回 null (同一个class有多个实例,则返回最早创建的实例)
DevRing.activityListManager().killAll(); //关闭所有activity
DevRing.activityListManager().killAllExclude(class); //关闭除了指定class的activity以外的所有activity
DevRing.activityListManager().exitApp(); //关闭所有页面并退出应用
3.8 LifeCycleCallback
提供了ActivityLifeCallback 和 FragmentLifeCallback,以实现基类的功能。
只需Activity实现IBaseActivity接口即可完成相关的基类操作。
只需Fragment实现IBaseFragment接口即可完成相关的基类操作。
具体请查看关于基类的那些事 以及项目代码
3.9 工具类
3.9.1 RingLog
可定位输出位置的Log
RingLog.e(TAG, message); //比如打印Error级日志
RingLog.json(TAG, jsonString);//将jsonString格式化后打印出来
RingLog.xml(TAG, xmlString);//将xmlString格式化后打印出来
...
3.9.2 RingToast
吐司工具类,新版修改自ToastUtils
RingToast.show("hello world");
RingToast.show(R.string.appName);
RingToast.show(1234);
//动态修改吐司样式,IToastStyle的实现可参考库中提供的ToastBlackStyle,或者Demo中的CustomToastStyle
RingToast.initStyle(IToastStyle)
3.9.3 UltimateBar
状态栏/导航栏颜色工具类。
来自UltimateBar,具体用法到里面查阅。
3.9.4 FileUtil
文件工具类
FileUtil.getUriForFile(context, file); //根据file获取uri,适配7.0系统
FileUtil.isSDCardAvailable(); //SD卡是否能用
FileUtil.getDirectory(parentDirectory, directory); //获取文件夹
FileUtil.getFile(parentDirectory, name); //获取文件
FileUtil.getFile(filePath); //获取文件
FileUtil.deleteFile(file); //删除文件
FileUtil.calculateFileSize(file); //计算文件大小
FileUtil.copyFile(source, target); //复制文件
FileUtil.saveFile(inputStream, outputStream); //保存文件
....更多方法请查看代码
3.9.5 ImageUitl
图片工具类.
用于对图片进行压缩(比例压缩 / 质量压缩)、跳转到相机/相册、对Bitmap做高斯模糊处理等。
ImageUtil.getImageFromCamera(activity, uri); //使用相机拍照并保存到指定位置
ImageUtil.getImageFromAlbums(activity); //从手机相册中获取照片
ImageUtil.cropImage(activity, cropWidth, cropHeight, photoUri, fileToSave); //使用系统的裁剪图片,并保存至指定位置
ImageUtil.scaleCompress(res/filePath/bitmap, width, height); //按比例压缩,返回bitmap
ImageUtil.qualityCompress(bitmap, maxSize); //质量压缩,直至图片不大于maxSize
ImageUtil.saveBitmapToFile(bitmap, file); //保存图片到文件
....更多方法请查看代码
3.9.6 NetworkUtil
网络状态工具类
NetworkUtil.isNetWorkAvailable(context); //当前网络是否可用
NetworkUtil.getNetWorkType(context); //获取当前网络类型
NetworkUtil.isWifiConnected(context); //当前是否为WIFI连接
NetworkUtil.isMobileConnected(context); //当前是否为移动网络
NetworkUtil.getAPNType(context); //获取apn类型
3.9.7 ConfigUtil
配置相关的工具类
ConfigUtil.getScreenSize(context); //获取屏幕宽高的int数组
ConfigUtil.getScreenLongSide(context); //获取屏幕的长边(即竖屏下的高,横屏下的宽)
ConfigUtil.getScreenShortSide(context); //获取屏幕的短边(即竖屏下的宽,横屏下的高)
ConfigUtil.getStatusBarHeight(context); //获取状态栏高度
ConfigUtil.getNavigationBarHeight(context); //获取底部导航栏高度
ConfigUtil.isApkInDebug(context); //判断当前应用是否是debug模式
3.9.8 FontTypeUtil
修改各控件(TextView,Button,EditText,CheckBox,RadioButton等)中字体样式的工具类
在activity的基类中调用
FontTypeUtil.replaceFont(context, "fonts/FZLanTYJW.ttf"); // 第二个参数为assert文件夹下的字体文件
或者在Application中调用
FontTypeUtil.replaceSystemDefaultFont(context, "fonts/FZLanTYJW.ttf"); // 第二个参数为assert文件夹下的字体文件
另外,在你的APP主题的style中设置
<style name="AppTheme" parent="...">
.....
<item name="android:typeface">monospace</item>
</style>
3.9.9 KeyboardUtil
软键盘工具类。
- 处理键盘遮挡EditText的问题:
在activity的onCreate中调用
@Override
protected void onCreate(Bundle savedInstanceState) {
KeyboardUtil.fixInput(this, isFullScreen); //第二个参数为当前页面是否为全屏模式
}
- 点击键盘外部收起键盘:
在activity的dispatchTouchEvent中调用
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
KeyboardUtil.handleKeyboardHide(this, ev);
return super.dispatchTouchEvent(ev);
}
注意事项
- 配置参数为File时,请自行确保对传入的File具有可读写权限。
- 部分框架需忽略混淆,具体的混淆配置请参考Demo中app下的proguard-rules.pro文件。
- DevRing库中AndroidManifest已添加了网络权限,所以主项目不必重复添加。
- DevRing库中已添加了Glide,EventBus,GreenDao,Dagger2,Retrofit2,RxJava2,RxAndroid2,RxLifeCycle2,RxPermission2的依赖,所以主项目不必重复添加。
- 可以通过exclude移除DevRing库中相关框架的依赖以减小包体积。 例如:
api ('com.ljy.ring:devring:x.x.x'){
//如果不需使用图片加载模块或者该模块不使用Glide实现,那么可以加上这句移除Devring库中对Glide的依赖以减小包体积
exclude module: 'glide'
//如果不需使用事件总线模块或者该模块不使用EventBus实现,那么可以加上这句移除Devring库中对EventBus的依赖以减小包体积
exclude module: 'eventbus'
//如果不需使用数据库模块或者该模块不使用GreenDao实现,那么可以加上这句移除Devring库中对GreenDao的依赖以减小包体积
exclude module: 'greendao'
}
有什么问题或建议,欢迎提issue或者简信告知~