注:该基础项目可用于多人协作开发,配置统一,并且有相关示例,根据个人需要灵活删减
目录
11. XML中ImageView与databinding(其他控件类是) 5
- 添加组件方式
简单方式步骤:
- 直接复制一个组件 ( 直接复制work组件的,那里面没什么东西 )
- 修改包名( 记得不要把其他组件的给修改了 ),applicationId,***ModuleInit (改成你当前组件名称)
- 在base组件config-->ModuleLifecycleReflexs 中配置你组件的ModuleInit
- Build.gradle中配置你所需要的
- 有疑问请自己对比其他组件即可
发送:
_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<Boolean>() {
@Override
public void accept(Boolean aBoolean) throws Exception {
if(aBoolean){
//请求成功
}else{
Log.e("TAG>>>","request Permissions err");
}
}
});
DownLoadManager.getInstance().load("文件下载地址", new ProgressCallBack<RequestBody>("文件存放路径", "文件名称") {
@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<String> 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 ( 其他组件里面也有 )
- 所有接口请明确请求参数,有多少个参数就写明多少参数,不推荐也不允许使用Map<String,String>方式,尽量要让下一个人一目了然。 ( 具体请查看截图 )
- 参数拦截 .addInterceptor(new BaseInterceptor(headers))//headers拦截-可以添加通用参数
- .addInterceptor(new CacheInterceptor(mContext))//cache拦截
- .addInterceptor(new ParamsInterceptor(mContext))//params拦截-可以添加通用参数
- 添加通用参数如header中Authorization, ( 具体请查看截图 )
- headers.put("Authorization", SPUtils.getInstance().getString(SPKeyGlobal.USER_SID));
- 添加通用参数如params中token ( 具体请查看截图 )
public interface DemoApiService {
@GET("action/apiv2/banner?catalog=1")
Observable<BaseResponse<LoginModel>> demoGet();
@FormUrlEncoded
@POST("action/apiv2/banner")
Observable<BaseResponse<DemoEntity>> 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<Disposable>() {
@Override
public void accept(Disposable disposable) {
showDialog();
}
})
.subscribe(new Consumer<BaseResponse<LoginModel>>() {
@Override
public void accept(BaseResponse<LoginModel> response) {
dismissDialog();
//清除列表
//请求成功
if (response.getCode() == 200) {
//采用ARouter+RxBus实现组件间通信
RxBus.getDefault().post(userInfoEntity);
//关闭页面
finish();
}
ToastUtils.showLong("" + response.getMessage());
}
}, new Consumer<ResponseThrowable>() {
@Override
public void accept(ResponseThrowable throwable) {
//请求刷新完成收回
dismissDialog();
}
}, new Action() {
@Override
public void run() {
//请求刷新完成收回
dismissDialog();
}
});
- XML中常用转义字符
示例如下 :
android:visibility="@{age < 1 ? View.GONE : View.VISIBLE}"
XML | 转义后 |
< | < |
> | > |
& | & |
&apos | ' |
" | " |
| 空格 |
- 空格: (普通的英文半角空格但不换行)
- 窄空格:
- (中文全角空格 (一个中文宽度))
- (半个中文宽度,但两个空格比一个中文略大)
- (一个中文宽度,但用起来会比中文字宽一点点)
- \u3000\u3000(首行缩进)
- \u3000(全角空格(中文符号))
- \u0020(半角空格(英文符号))
- …(省略号)
- XML中ImageView与databinding(其他控件类是)
示例如下(记得在XML中导入 <import type="com.qs.user.R"/> ) :
如果有特殊需求你也可以使用image.ViewAdapter 类( 如:特殊形状的图片五角星等需要你自己去画 )去添加设置你需要的
根据自己项目需求,去配置就好(使用前请将其他无效代码移除)
base-->simple-->pictureselector-->PhotoMainActivity (图片视频音频选择)
setting-->ui-->photoselect-->PhotoSelectActivity (图片选择示例,已移除无效代码)
根据自己项目需求,去配置就好
base-->simple-->xpopupdemo-->XpopupMainActivity-->QuickStartDemo (第三方框架里面集成了多种弹窗,如特殊需求使用自定义即可)
main-->popupwindow--> 实际使用自定义
3. 滑动导航
根据自己项目需求,去配置就好 (支持多个滑动,也支持等宽)
base-->simple-->slidetab-->SlidingTabActivity (直接查看使用方式)
user-->ui-->task-->mytask-->MyTaskActivity (直接查看使用方式)
4. 换肤功能
根据自己项目需求,去配置就好
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)