技术要点
1. RxJava+Retrofit+OkHttp实现链式http请求
2. 封装基类:BaseActivity、BasePresenterActivity、BaseFragment、BasePresenterFragment、RecycleAdapter、BasePresenter
3. 封装工具扩展类:CalendarExt、ContextExt、DateExt、EditTextExt、GsonExt、RxJavaExt、StringExt
4. 引入LifeCycle,将Presenter和Activity的生命周期绑定在一块儿
5. 将在Application中初始化移至到ContentProvider中,从而不用封装BaseApplication
6. AOP(面向切面)封装注解:TimeLog、ClickGap
7. APT(编译时注解)封装注解:OnClickFirstDrawable、OnClickFirstText、OnClickSecondDrawable、OnClickSecondText、Prefs、PrefsField、StatusBar
8. Dagger2对类的生命周期作一个管理
最低兼容:19
Gradle
1. 在Project的build.gradle中添加
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
复制代码
dependencies {
classpath 'com.github.franticn:gradle_plugin_android_aspectjx:2.0.6'
}
复制代码
3. 在app的build.gradle的添加
apply plugin: 'kotlin-kapt' // 使用 kapt 注解处理工具
apply plugin: 'android-aspectjx'
复制代码
4. 添加依赖
implementation "com.github.catch-pig.kotlin-mvp:mvp:last_version"
kapt "com.github.catch-pig.kotlin-mvp:compiler:last_version"
kapt "com.google.dagger:dagger-compiler:2.23.2"
kapt "com.google.dagger:dagger-android-processor:2.23.2"
复制代码
使用
1. 在须要使用状态栏、标题栏、加载动画的主题中配置全局参数:
属性 |
类型 |
必须 |
默认 |
说明 |
title_bar_back_icon |
DrawableRes |
是 |
无 |
标题栏的返回图标 |
title_bar_background |
ColorRes |
是 |
无 |
标题栏的背景色 |
title_bar_text_color |
ColorRes |
是 |
无 |
标题栏的文字颜色 |
title_bar_show_line |
boolean |
否 |
false |
标题栏的下方的线条是否显示 |
loading_view_color |
ColorRes |
是 |
无 |
loading动画颜色 |
loading_view_background |
ColorRes |
是 |
无 |
loading动画背景色 |
recycle_view_empty_layout |
LayoutRes |
否 |
emptyLayout |
列表空页面 |
使用示例:java
```
<style name="AppThemeBarStyle" parent="Theme.AppCompat.Light.NoActionBar">
<!--全局标题栏和状态栏配置-->
<item name="title_bar_background">@color/colorPrimary</item>
<item name="title_bar_back_icon">@drawable/back</item>
<item name="title_bar_text_color">@color/white</item>
<item name="title_bar_show_line">false</item>
<item name="loading_view_color">@color/colorAccent</item>
<item name="loading_view_background">@color/white</item>
<!--全局标题栏和状态栏配置-->
</style>
```
复制代码
2. Activity
- 使用MVP的继承BasePresenterActivity
- 不使用MVP的继承BaseActivity
3. Fragment
- 使用MVP的继承BasePresenterFragment
- 不使用MVP的继承BaseFragment
4. 若是使用RecycleView的时候,Adapter能够继承RecycleAdapter来使用
在app的build.gradle的android下添加以下代码:android
//启用实验性功能
androidExtensions {
experimental = true
}
复制代码
只须要实现如下两个方法git
class UserAdapter(iPageControl: IPageControl):RecyclerAdapter<User>(iPageControl) {
override fun layoutId(): Int {
return R.layout.item_user
}
override fun bindViewHolder(holder: CommonViewHolder, m: User, position: Int) {
//使用的experimental以后,能够直接holder.控件ID,不须要holder.itemView.控件ID
holder.name.text = m.name
}
}
复制代码
5. 注解使用
属性 |
类型 |
必须 |
默认 |
说明 |
value |
StringRes |
是 |
无 |
标题内容 |
backgroundColor |
ColorRes |
否 |
全局标题背景色 |
标题背景色 |
textColor |
ColorRes |
否 |
全局标题文字颜色 |
标题文字颜色 |
backIcon |
DrawableRes |
否 |
全局标题返回按钮图标 |
标题返回按钮图标 |
属性 |
类型 |
必须 |
默认 |
说明 |
value |
StringRes |
是 |
无 |
按钮图片内容 |
属性 |
类型 |
必须 |
默认 |
说明 |
value |
StringRes |
是 |
无 |
按钮文字内容 |
属性 |
类型 |
必须 |
默认 |
说明 |
value |
StringRes |
是 |
无 |
按钮图片内容 |
属性 |
类型 |
必须 |
默认 |
说明 |
value |
StringRes |
是 |
无 |
按钮文字内容 |
属性 |
类型 |
必须 |
默认 |
说明 |
hide |
boolean |
否 |
false |
隐藏状态栏 |
enabled |
boolean |
否 |
false |
状态栏是否可用 |
transparent |
boolean |
否 |
false |
状态栏透明 |
5.7 TimeLog-打印方法和构造方法执行的时间
属性 |
类型 |
必须 |
默认 |
说明 |
value |
Long |
否 |
800毫秒 |
重复点击间隔 |
5.9 Prefs-SharedPreferences注解生成器
属性 |
类型 |
必须 |
默认 |
说明 |
value |
String |
否 |
"" |
别名 |
mode |
PrefsMode |
否 |
PrefsMode.MODE_PRIVATE |
模式,对应PreferencesMode |
5.10 PrefsField-SharedPreferences字段注解
属性 |
类型 |
必须 |
默认 |
说明 |
value |
String |
否 |
"" |
字段别名,若是为空则取修饰字段的参数名称 |
6. 刷新分页
使用RefreshLayoutWrapper+RecyclerAdapter控件实现刷新功能
-
RefreshLayoutWrapper继承于SmartRefreshLayout,具体使用请看SmartRefreshLayout官方文档,默认每页数据量为16,若是想修改每页数据量,可以使用以下方法更改:github
RefreshLayoutWrapper.pageSize = 16
复制代码
-
RefreshLayoutWrapper实现了IPageControl,能够经过调用接口内的方法类获取刷新控件的状态和更改状态bash
//获取刷新的状态
iPageControl.getRefreshStatus()
复制代码
-
RecyclerAdapter在实例化的时候传入IPageControl, 获取数据成功以后,只须要调用autoUpdateList(list)方法, 能够自动RefreshLayoutWrapper页码和刷新状态变化app
-
数据更新失败能够调用RecyclerAdapter.updateFailed()maven
-
获取每页的数据量和下一页的页码,能够调用一下方法ide
//每页的数据量
RecyclerAdapter.pageSize = 16
//下一页的页码
RecyclerAdapter.nextPageIndex = 1
复制代码
第三方库