注:该基础项目可用于多人协作开发,配置统一,并且有相关示例,根据个人需要灵活删减
一. 框架说明 2
1. 添加组件方式 2
二. 注意事项 2
1. RxBus使用规定 2
2. 获取图片验证码(图片流) 2
3. 请求权限(统一使用RxPermissions) 3
4. 文件下载 3
5. 图片压缩 4
6. 通用ShowDialog 4
7. 重点注意(不要修改组件包名) 5
8. 调用定位功能(高德) 5
9. 接口示例与要求 5
10. XML中常用转义字符 5
11. XML中ImageView与databinding(其他控件类是) 5
12. 5
13. 5
三. DEMO使用 5
1. 图片,视频,音频选择 5
2. 弹框使用 6
3. 滑动导航 7
4. 换肤功能 7
5. 二维码生成,识别 8
6. 图片预览 8
7. 支付组件 9
8. 地区,时间选择 10
9. 自定义控件组件 12
10. WebviewDemo 13
11. 多语言 13
12. 版本更新 15
13. 地图组件 15
简单方式步骤:
发送:
_Login _login=new _Login(1,"name","age");
RxBus.getDefault().post(_login);
接收:
Disposable subscribe = RxBus.getDefault().toObservable(_Login.class)
.subscribe(new Consumer<_Login>() {
@Override
public void accept(_Login l) throws Exception {
//登录成功后重新刷新数据
initData();
//解除注册
RxSubscriptions.remove(subscribe);
}
});
RxSubscriptions.add(subscribe);
示例如下:
示例如下:
RxPermissions rxPermissions=new RxPermissions(this);
if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){
rxPermissions.request(new String[]{"","",""}).subscribe(new Consumer() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if(aBoolean){
//请求成功
}else{
Log.e("TAG>>>","request Permissions err");
}
}
});
DownLoadManager.getInstance().load("文件下载地址", new ProgressCallBack("文件存放路径", "文件名称") {
@Override
public void onStart() {
super.onStart();
Log.e("TAG>>>","开始下载");
}
@Override
public void onSuccess(RequestBody requestBody) {
Log.e("TAG>>>","下载完成");
}
@Override
public void progress(long progress, long total) {
Log.e("TAG>>>","下载进度");
}
@Override
public void onError(Throwable e) {
Log.e("TAG>>>","下载失败");
}
});
List fileList=new ArrayList<>();
fileList.add("/data/image1.png");
fileList.add("/data/image2.png");
ImageUtils.compressWithRx(fileList, new Observer() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Object o) {
File file= (File) o;
Log.e("TAG>>>",""+file.getAbsolutePath());
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
Activity 继承 BaseActivity (如项目有特殊需求请修改基类showDialog()方法)
Fragment 继承 BaseFragment (如项目有特殊需求请修改基类showDialog()方法)
在接口请求的时候调用showDialog(), 请求完成后调用dismissDialog()
各组件的命名风格为: com.face.*** ( 当前组件的实际功能 )
示例: 支付组件 com.face.payment 地图组件 com.face.map 主业务组件 com.face.main
已经有的组件请勿修改组件包名,appid ( 组件的包名并不影响你宿主所有功能的使用 )
module-->ui-->package-->XXXViewModel ( 其他组件里面也有 )
public interface DemoApiService {
@GET("action/apiv2/banner?catalog=1")
Observable> demoGet();
@FormUrlEncoded
@POST("action/apiv2/banner")
Observable> demoPost(@Field("catalog") String catalog);
}
LinkedHashMap datas = new LinkedHashMap();
datas.put("username", userPhone.get());//账号
datas.put("password", phoneYzm.get());//密码
datas.put("code", igmYzm.get());//图形验证码数据
RetrofitClient.getInstance().create(DemoApiService.class)
.demoGet(datas)
.compose(RxUtils.bindToLifecycle(getLifecycleProvider())) //请求与View周期同步
.compose(RxUtils.schedulersTransformer()) //线程调度
.compose(RxUtils.exceptionTransformer()) // 网络错误的异常转换, 这里可以换成自己的ExceptionHandle
.doOnSubscribe(new Consumer() {
@Override
public void accept(Disposable disposable) {
showDialog();
}
})
.subscribe(new Consumer>() {
@Override
public void accept(BaseResponse response) {
dismissDialog();
//清除列表
//请求成功
if (response.getCode() == 200) {
//采用ARouter+RxBus实现组件间通信
RxBus.getDefault().post(userInfoEntity);
//关闭页面
finish();
}
ToastUtils.showLong("" + response.getMessage());
}
}, new Consumer() {
@Override
public void accept(ResponseThrowable throwable) {
//请求刷新完成收回
dismissDialog();
}
}, new Action() {
@Override
public void run() {
//请求刷新完成收回
dismissDialog();
}
});
示例如下 :
android:visibility="@{age < 1 ? View.GONE : View.VISIBLE}"
XML |
转义后 |
< |
< |
> |
> |
& |
& |
&apos |
' |
" |
" |
|
空格 |
示例如下(记得在XML中导入
如果有特殊需求你也可以使用image.ViewAdapter 类( 如:特殊形状的图片五角星等需要你自己去画 )去添加设置你需要的
根据自己项目需求,去配置就好(使用前请将其他无效代码移除)
base-->simple-->pictureselector-->PhotoMainActivity (图片视频音频选择)
setting-->ui-->photoselect-->PhotoSelectActivity (图片选择示例,已移除无效代码)
根据自己项目需求,去配置就好
base-->simple-->xpopupdemo-->XpopupMainActivity-->QuickStartDemo (第三方框架里面集成了多种弹窗,如特殊需求使用自定义即可)
main-->popupwindow--> 实际使用自定义
根据自己项目需求,去配置就好 (支持多个滑动,也支持等宽)
base-->simple-->slidetab-->SlidingTabActivity (直接查看使用方式)
user-->ui-->task-->mytask-->MyTaskActivity (直接查看使用方式)
根据自己项目需求,去配置就好
setting-->ui-->skin-->SkinActivity (直接查看使用方式)
其他肤色的安装包放置在setting-->assets-->skins中 (daytime.skin 为apk将后缀.apk改为.skin即可)
skins-->daytime.skin的安装包使用skin-demo生成打包成apk即可 (如果有多套肤色则将skin-demo复制多套如: skin-daytime , skin-night 放置在框架的根目录下即跟skin-demo同级)
根据自己项目需求,去配置就好
base-->simple-->zxing-->ZXingActivity (直接查看使用方式)
base-->simple-->zxing-->Generatectivity
根据自己项目需求,去配置就好
base-->simple-->picturepreview-->PhotoPreviewActivity(直接查看使用方式)
根据自己项目需求,去配置就好
payment-->ui-->DemoActivity (直接查看使用方式)
只需调整参数即可,其他已经配置好,
根据自己项目需求,去配置就好
base-->simple-->xpopupdemo-->XpopupMainActivity-->QuickStartDemo(直接查看使用方式)
效果
根据自己项目需求,去配置就好
widget-->WidgetActivity (直接查看使用方式,你在项目中需要的自定义控件也要放置在该组件中)
效果
根据自己项目需求,去配置就好
setting-->ui-->agreement-->UserAgreementActivity(直接查看使用方式)
包含点击事件拦截
根据自己项目需求,去配置就好
User-->ui-->language-->LanguageActivity (直接查看使用方式)
效果
使用方式 (其他具体请查看demo)
每个Activity必须继承BaseActivity , 如果特殊需求请在对应的Activity -->onCreate中调用
LanguageUtil.switchLanguage(this); 在setContentView前面
添加其他语言
在LanguageUtil中添加对应的Value
在LanguageUtil中切换多语言
根据自己项目需求,去配置就好
Setting-->ui-->demo-->DemoSimpleItemViewModel
效果
使用案例
目前只支持高德,根据自己项目需求,去配置就好 ( 只需要在宿主里面配置实际Key就好 )
Map-->ui-->location-->LocationFragment (简单的定位功能,在其他组件里面引用Fragment)
Map-->ui-->looklocation-->LookLocationActivity
Map-->ui-->looklocation-->demo (里面已集成高德地图的demo, 单独组件运行可直接查看效果,已经配置key)
最后附上githup地址点我直达,CSDN下载点我直达